首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-08-11 
Hibernate映射关系----复合主键、Component、集合映射复合主键映射多个字段构成主键,在现实中不太常用。一般

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>标签。

热点排行