复合主键

什么是序列化
就是可以将一个对象(标志对象的类型)及其状态转换为字节码,保存起来(可以保存在数据库,内存,文件等),然后可以在适当的时候再将其状态恢复(也就是反序列化)。serialization 不但可以在本机做,而且可以经由网络操作。它自动屏蔽了操作系统的差异,字节顺序等。比如,在 Windows 平台生成一个对象并序列化之,然后通过网络传到一台 Unix 机器上,然后可以在这台Unix机器上正确地重构(deserialization)这个对象。 不必关心数据在不同机器上如何表示,也不必关心字节的顺序或者其他任何细节。

另外,还应明白以下几点:

a. java.io.Serializable接口没有任何方法属性域,实现它的类只是从语义上表明自己是可以序列化的。

b. 在对一个 Serializable(可序列化)对象进行重新装配的过程中,不会调用任何构建器(甚至默认构建器)。整个对象都是通过从 InputStream 中取得数据恢复的。

c. 如是要一个类是可序列化的,那么它的子类也是可序列化的
package hibernate.belle;

import java.util.Date;

public class Fiscal {
      private FiscalPK fiscalpk;
      private Date date;
    public Date getDate() {
        return date;
    }
    public void setDate(Date date) {
        this.date = date;
    }
    public FiscalPK getFiscalpk() {
        return fiscalpk;
    }
    public void setFiscalpk(FiscalPK fiscalpk) {
        this.fiscalpk = fiscalpk;
    }


}
package hibernate.belle;

import java.io.Serializable;

public class FiscalPK implements Serializable{
    private int fiscalYear;
    private int fiscalMonth;
    public int getFiscalYear() {
        return fiscalYear;
    }
    public void setFiscalYear(int fiscalYear) {
        this.fiscalYear = fiscalYear;
    }
    public int getFiscalMonth() {
        return fiscalMonth;
    }
    public void setFiscalMonth(int fiscalMonth) {
        this.fiscalMonth = fiscalMonth;
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + fiscalMonth;
        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;
        FiscalPK other = (FiscalPK) obj;
        if (fiscalMonth != other.fiscalMonth)
            return false;
        if (fiscalYear != other.fiscalYear)
            return false;
        return true;
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping >
 <class name="hibernate.belle.Fiscal" table="fiscal" >
     <composite-id name="fiscalpk">
       <key-property name="fiscalYear"></key-property>
       <key-property name="fiscalMonth"></key-property>
     </composite-id>
     <property  name="date"> </property>

 </class>      
</hibernate-mapping>
package hibernate_manytomany;

import java.util.Date;

import org.hibernate.Session;

import hibernate.belle.Fiscal;
import hibernate.belle.FiscalPK;
import hibernate.belle.HibernateUtils;

import junit.framework.TestCase;

public class Extends extends TestCase{


     public void teststore(){


       Session session=null;
       try{ 
            session=HibernateUtils.getSession();
            session.beginTransaction();

            Fiscal fis=new Fiscal();
            FiscalPK pk=new FiscalPK();
            pk.setFiscalYear(2009);
            pk.setFiscalMonth(9);

            fis.setFiscalpk(pk);
            fis.setDate(new Date());

            session.save(fis);

           session.beginTransaction().commit();
       }catch(Exception e)
       {
           e.printStackTrace();
           session.beginTransaction().rollback();

       }finally{

           HibernateUtils.closeSession(session);
       }
     }
     public void testload(){


           Session session=null;
           try{ 
                session=HibernateUtils.getSession();
                session.beginTransaction();

                Fiscal fis=new Fiscal();
                FiscalPK pk=new FiscalPK();
                pk.setFiscalMonth(9);
                pk.setFiscalYear(2009);
                fis=(Fiscal)session.load(Fiscal.class, pk);
                System.out.println(fis.getDate());


               session.beginTransaction().commit();
           }catch(Exception e)
           {
               e.printStackTrace();
               session.beginTransaction().rollback();

           }finally{

               HibernateUtils.closeSession(session);
           }
         }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值