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

2014-11-24 08:51:38 · 作者: · 浏览: 2
复合主键映射
多个字段构成主键,在现实中不太常用。一般情况下把主键相关字段拿出来,作为属性单独构成一个类,并生成geter和seter方法,最重要的是单独构成的这个类必须实现序列化接口且覆盖equals和hashcode方法。
比如:FiscalYearPeriod由复合主键构成,代码:
[java]
package com.snail.hibernate;

import java.util.Date;

/**
* 核算期间
* @author yuanfubiao
*/
public class FiscalYearPeriod {

private FiscalYearPeriodPK fiscalYearPeriodPK;

//开始日期
private Date beginDate;

//结束日期
private Date endDate;

//状态
private String periodSts;

public FiscalYearPeriodPK getFiscalYearPeriodPK() {
return fiscalYearPeriodPK;
}

public void setFiscalYearPeriodPK(FiscalYearPeriodPK fiscalYearPeriodPK) {
this.fiscalYearPeriodPK = fiscalYearPeriodPK;
}

public Date getBeginDate() {
return beginDate;
}

public void setBeginDate(Date beginDate) {
this.beginDate = beginDate;
}

public Date getEndDate() {
return endDate;
}

public void setEndDate(Date endDate) {
this.endDate = endDate;
}

public String getPeriodSts() {
return periodSts;
}

public void setPeriodSts(String periodSts) {
this.periodSts = periodSts;
}
}
主键相关字段构成的单独类FiscalYearPeriodPK,代码:
[java]
package com.snail.hibernate;

import java.io.Serializable;

public class FiscalYearPeriodPK implements Serializable {

private int fiscalYear;

private int fiscalPeriod;

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + fiscalPeriod;
result = prime * result + fiscalYear;
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
FiscalYearPeriodPK other = (FiscalYearPeriodPK) obj;
if (fiscalPeriod != other.fiscalPeriod)
return false;
if (fiscalYear != other.fiscalYear)
return false;
return true;
}

public int getFiscalYear() {
return fiscalYear;
}

public void setFiscalYear(int fiscalYear) {
this.fiscalYear = fiscalYear;
}

public int getFiscalPeriod() {
return fiscalPeriod;
}

public void setFiscalPeriod(int fiscalPeriod) {
this.fiscalPeriod = fiscalPeriod;
}
}
FiscalYearPeriod实体类的映射文件FiscalYearPeriod.hbm.xml。
[ html]











composite-id标签里面所映射的就是FiscalYearPeriod类的两个复合主键,在对象模型中,FiscalYearPeriod持有FiscalYearPeriodPK的引用。
Component映射
也叫 组件映射。在对象模型中,为了考虑复用率,设计类一般都会从细粒度出发,尽量做到含义明确,层次分明。而关系模型的设计与对象模型恰恰相反,为了性能、便捷等因素,一般是采用粗粒度的。
如例: \

User和Employee的映射文件。

[html]














[html] view plaincopy














从对象模型看,Contact是User和Employee的逻辑组成部分,两个