当前位置:编程学习 > JAVA >>

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

复合主键映射
   多个字段构成主键,在现实中不太常用。一般情况下把主键相关字段拿出来,作为属性单独构成一个类,并生成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] 
<hibernate-mapping package="com.snail.hibernate"> 
    <class name="FiscalYearPeriod" table="t_fiscal_year_period"> 
        <composite-id name="fiscalYearPeriodPK"> 
            <key-property name="fiscalYear"/> 
            <key-property name="fiscalPeriod"/> 
        </composite-id> 
        <property name="beginDate" type="date"/> 
        <property name="endDate" type="date"/> 
        <property name="periodSts"/> 
    </class> 
</hibernate-mapping> 
composite-id标签里面所映射的就是FiscalYearPeriod类的两个复合主键,在对象模型中,FiscalYearPeriod持有FiscalYearPeriodPK的引用。
Component映射
   也叫组件映射。在对象模型中,为了考虑复用率,设计类一般都会从细粒度出发,尽量做到含义明确,层次分明。而关系模型的设计与对象模型恰恰相反,为了性能、便捷等因素,一般是采用粗粒度的。
   如例:\
   
    User和Employee的映射文件。
   
[html] 
<hibernate-mapping package="com.snail.hibernate"> 
    <class name="User" table="t_user"> 
        <id name="id"> 
            <generator class="native"/> 
        </id> 
        <property name="name"/> 
  &n
补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,