读书人

Hibernate投射关系-复合主键、Compone

发布时间: 2012-08-11 20:50:31 作者: rapoo

Hibernate映射关系----复合主键、Component、集合映射

复合主键映射

多个字段构成主键,在现实中不太常用。一般情况下把主键相关字段拿出来,作为属性单独构成一个类,并生成geter和seter方法,最重要的是单独构成的这个类必须实现序列化接口且覆盖equals和hashcode方法。

比如:FiscalYearPeriod由复合主键构成,代码:

   主键相关字段构成的单独类FiscalYearPeriodPK,代码:

    FiscalYearPeriod实体类的映射文件FiscalYearPeriod.hbm.xml。

composite-id标签里面所映射的就是FiscalYearPeriod类的两个复合主键,在对象模型中,FiscalYearPeriod持有FiscalYearPeriodPK的引用。

Component映射

也叫组件映射。在对象模型中,为了考虑复用率,设计类一般都会从细粒度出发,尽量做到含义明确,层次分明。而关系模型的设计与对象模型恰恰相反,为了性能、便捷等因素,一般是采用粗粒度的。

如例:

Hibernate投射关系-复合主键、Component、集合映射Hibernate投射关系-复合主键、Component、集合映射

User和Employee的映射文件。

   从对象模型看,Contact是User和Employee的逻辑组成部分,两个实体类分别持有它的引用,它与实体类主要差别在于没有id,Component(Contact)在DDD中称为值类。

从关系模型看,最终分成了两张表,分别保存各自的数据,比对象模型粒度要粗一些。用<Component>标签完成了Component映射。

集合映射

下面完成set、list、array、map的映射。其原理是把集合映射成一张表。

Hibernate投射关系-复合主键、Component、集合映射

实体类对象:

package com.snail.hibernate;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;@SuppressWarnings("rawtypes")public class CollectionMapping {private int id;private String name;private Set setValues = new HashSet();private List listValues = new ArrayList();private String[] arrayValues;private Map mapValues;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Set getSetValues() {return setValues;}public void setSetValues(Set setValues) {this.setValues = setValues;}public List getListValues() {return listValues;}public void setListValues(List listValues) {this.listValues = listValues;}public String[] getArrayValues() {return arrayValues;}public void setArrayValues(String[] arrayValues) {this.arrayValues = arrayValues;}public Map getMapValues() {return mapValues;}public void setMapValues(Map mapValues) {this.mapValues = mapValues;}}

映射文件:

    <list-index>标签是防止放入表中的集合元素顺序打乱,因为Set内的元素是没有顺序的,因此不需要<list-index>标签。

读书人网 >编程

热点推荐