Hiberate one to one 单向唯一外键关联

package hibernate.belle;

public class Person {
private int id;
private String name;

private IDcard idcard;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public IDcard getIdcard() {
    return idcard;
}

public void setIdcard(IDcard idcard) {
    this.idcard = idcard;
}

}

package hibernate.belle;

public class IDcard {
     private String no;
     private int id;
     //private Person person;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }



    public String getNo() {
        return no;
    }

    public void setNo(String no) {
        this.no = no;
    }



}
<?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.Person"  table="t_person"> 
          <id name="id" >
              <generator class="native"/> 

          </id>
          <property name="name"/>

          <many-to-one name="idcard"  unique="true"/> 
 </class>         
</hibernate-mapping>
<?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.IDcard"  table="t_idcard"> 
          <id name="id" >
              <generator class="native"/> 
          </id>
          <property name="no"/>



</class>
</hibernate-mapping>
import org.hibernate.Session;

import hibernate.belle.HibernateUtils;
import hibernate.belle.IDcard;
import hibernate.belle.Person;
import junit.framework.TestCase;

public class OneToOneTest extends TestCase{


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

              IDcard idcard=new IDcard();
              idcard.setNo("1112");

              Person person=new Person();
              person.setName("Belle");
              person.setIdcard(idcard);

              //这里一定要先把idcard变成persistent状态 否是person那个外键没有能参照的   
              session.save(idcard);
              session.save(person);


              /// System.out.println("idd's name is  "+idd.getPerson().getName());
              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();

              Person person= new Person();
              Person p=(Person)session.load(Person.class,1);
//一开始写int总报错  非要写new Integer(1)  不是说好自动拆箱装箱吗 然后又重新设置了一遍JDK1.8  然后就支持了
                System.out.println("p. name ="+ p.getName()+"p.idcard="+p.getIdcard().getId());

              session.beginTransaction().commit();



          }catch(Exception e)
          {

              e.printStackTrace();
              session.beginTransaction().rollback();
          }finally{

              HibernateUtils.closeSession(session);

          }

      }

}

虽然这里和many to one只有 unique这里属性的差别 但是 多对一可以只save多的那一边 不会报错
这里的一对一唯一外键关联 则一定要把被参照的先save 再把参照的save 注意这个区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值