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>
本文介绍在Hibernate框架中如何使用组件关联映射(component association mapping)来提高实体类的复用性和清晰度。通过将共享属性抽象为独立的类(如联系信息),并作为值对象嵌入到用户和员工等实体中,可以简化代码结构,实现细粒度的对象模型划分。
2149

被折叠的 条评论
为什么被折叠?



