符合主键映射或联合主键映射:表中的两个字段共同构成主键的映射

FiscalYearPeriod类:

package com.cnblogs.hibernate_first;

import java.util.Date;

public class FiscalYearPeriod {

    private FiscalYearPeriodPK fiscalYearPeriodPK;

    public FiscalYearPeriodPK getFiscalYearPeriodPK() {
        return fiscalYearPeriodPK;
    }

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

    // 开始日期
    private Date beginDate;
    // 结束日期
    private Date endDate;
    // 状态
    private String periodSts;

    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;
    }

}
View Code

FiscalYearPeriodPK类(复合主键类,必须序列化):

package com.cnblogs.hibernate_first;

import java.io.Serializable;

public class FiscalYearPeriodPK implements Serializable {

    // 核算年
    private int fiscalYear;
    // 核算月
    private int fiscalPeriod;

    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;
    }


@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;
}
}
View Code

FiscalYearPeriod.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >

<hibernate-mapping package="com.cnblogs.hibernate_first">
    <class name="FiscalYearPeriod" table="t_fiscalYearPeriod">
    <!--  id只能描述单一主键,如果复活主键需要使用composite
        <id name="id" column="t_id">
            <generator class="native"></generator>
        </id>    
        -->
        <composite-id name="fiscalYearPeriodPK">
            <key-property name="fiscalYear"></key-property>
            <key-property name="fiscalPeriod"></key-property>
        </composite-id>
        <property name="beginDate" column="t_beginDate" />
        <property name="endDate" column="t_endDate" />
        <property name="periodSts" column="t_periodSts" />
    </class>
</hibernate-mapping>
View Code

Test类:

package com.cnblogs.hibernate_first;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.hibernate.Session;

import junit.framework.TestCase;

public class compositePk_mappingTest extends TestCase {

    public void testSave1() {
        Session session = null;
        try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            FiscalYearPeriod fiscalYearPeriod = new FiscalYearPeriod();
            FiscalYearPeriodPK fiscalYearPeriodPK = new FiscalYearPeriodPK();
            fiscalYearPeriodPK.setFiscalYear(2018);
            fiscalYearPeriodPK.setFiscalPeriod(10);
            fiscalYearPeriod.setFiscalYearPeriodPK(fiscalYearPeriodPK);
            //fiscalYearPeriod.setBeginDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            fiscalYearPeriod.setBeginDate(new Date());
            fiscalYearPeriod.setEndDate(new Date());
            fiscalYearPeriod.setPeriodSts(new String("傻逼"));
            session.save(fiscalYearPeriod);
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        } finally {
            HibernateUtils.closeSession(session);
        }
    }

    public void testLoad1() {
        Session session = null;
        try {
            session = HibernateUtils.getSession();
            session.beginTransaction();
            FiscalYearPeriodPK fiscalYearPeriodPK = new FiscalYearPeriodPK();
            fiscalYearPeriodPK.setFiscalYear(2018);
            fiscalYearPeriodPK.setFiscalPeriod(10);
            FiscalYearPeriod fiscalYearPeriod = session.load(FiscalYearPeriod.class,fiscalYearPeriodPK);
            System.out.println(fiscalYearPeriod.getPeriodSts() +"   "+ fiscalYearPeriod.getBeginDate()+"   "+fiscalYearPeriod.getEndDate() +
                    "   "+fiscalYearPeriod.getFiscalYearPeriodPK().getFiscalYear() +"   "+ fiscalYearPeriod.getFiscalYearPeriodPK().getFiscalPeriod());
            
            session.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        } finally {
            HibernateUtils.closeSession(session);
        }
    }
}
View Code

 

转载于:https://www.cnblogs.com/Juli/p/8377889.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值