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

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

 

posted @ 2018-01-29 16:14  错莫难瞒  阅读(366)  评论(0编辑  收藏  举报