Hibernate!!组件映射(component)

component(组件)关联映射

目前有两个类如下:

大家发现用户与员工存在很多相同的字段,但是两者有不可以是同一个类中,这样在实体类中每次都要输入很多信息,

现在把联系信息抽取出来成为一个类,然后在用户、员工对象中引用就可以,如下:

值对象没有标识,而实体对象具有标识,值对象属于某一个实体,使用它重复使用率提升,而且更清析。

以上关系的映射称为component(组件)关联映射
在hibernate中,component是某个实体的逻辑组成部分,它与实体的根本区别是没有oid(对象标识符),component可以成为是值对象(DDD)。
采用component映射的好处:它实现了对象模型的细粒度划分,层次会更加分明,复用率会更高。
 
 
例子“
annotation实现: 需要用到@Embedded (嵌入的)表示是要嵌入到此实体的,是此实体的一部分。
1 //一个普通的类,并不是实体
2 public class Wife {
3     //注意,此类中无id如此之类的主键属性,因为不会被映射为一张表
4     private  String  wifename ;
5     private  int  wifeage ;
6     //省略get、set方法
7     

 

 1 @Entity
 2 public class Husband {
 3     private  int  id ;
 4     private  String  name ;
 5     private  Wife   wife ;
 6     
 7     
 8     @Id
 9     @GeneratedValue
10     public int getId() {
11         return id;
12     }
13     
14     @Embedded
15     public Wife getWife() {
16         return wife;
17     }
18     
19     //省略get、set方法

生成的只有husband表,里面含有wife的属性

 
 
用xml方法,配置如下:
 1 <hibernate-mapping>
 2     <class name="com.hb.model.Husband" >
 3         <id name="id">
 4             <generator class="native"></generator>
 5         </id>        
 6         <property name="name"></property>
 7     <!-- component说明wife是个组件,里面有几个属性需要映射到数据库表中 -->
 8         <component name="wife">
 9             <property name="wifeName"></property>
10             <property name="wifeage"></property>
11         </component>
12     </class>
13     
14 </hibernate-mapping>

 

 
 
posted @ 2014-12-11 15:56  Mokaffe  阅读(509)  评论(0编辑  收藏  举报