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>