Hibernate之one2one主键关联

1:Person类

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

 public IdCard getIdCard() {
  return idCard;
 }

 public void setIdCard(IdCard idCard) {
  this.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;
 } 

}

 

    IdCard类:

public class IdCard {
 
 private int id;
 private String cardNo;
 private Person
person;

 

 public Person getPerson() {
  return person;
 }

 public void setPerson(Person person) {
  this.person = person;
 }

 public int getId() {
  return id;
 }

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

 public String getCardNo() {
  return cardNo;
 }

 public void setCardNo(String cardNo) {
  this.cardNo = cardNo;
 }

}

 

2:配置文件

 IdCard的配置文件:

<hibernate-mapping >
  <class name="com.bjsxt.hibernate.IdCard" table="t_idcard">
     <id name="id">
         <generator class="foregin">

              <param  name="property">peopole</param>

          </generator >

        
     </id>
     <property name="cardNo"></property>   
     <one-to-one name="person"></one-to-one> 
  </class>
</hibernate-mapping>


 Person类的配置文件:


<hibernate-mapping >
  <class name="com.bjsxt.hibernate.Person" table="t_person">
     <id name="id">
         <generator class="uuid">
         </generator>
     </id>

     <property name="name"></property>
     <one-to-one name="idCard"  class="com.bjsxt.hibernate.IdCard"  constrained="true"/>
  </class>
</hibernate-mapping>

 


3:测试程序

//首先实例化一个IdCard对象,但是根据保存person来保存IdCard

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

   IdCard idCard = new IdCard();
   idCard.setCardNo("88888888888888");
   
   Person person = new Person();
   person.setName("jsjs");
   

   person.setIdCard(idCard);


 
  //不会出现TransientObjectException异常
   //因为一对一主键关联映射中,默认了cascade属性
   session.save(person);
   
   session.getTransaction().commit();
   
  }catch(Exception e){
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally{
   HibernateUtils.closeSession(session);
  } 
 }
 

//首先加载Person对象,再加载IdCard对象
 public void testLoad1(){
  Session session = null;
  try{
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   Person person = (Person)session.load(Person.class,1);
   System.out.println(person.getName());
   System.out.println(person.getIdCard().getCardNo());
    
   session.getTransaction().commit();
   
  }catch(Exception e){
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally{
   HibernateUtils.closeSession(session);
  } 
 }
 

//首先加载IdCard对象,再加载Person对象
 public void testLoad2(){
  Session session = null;
  try{
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   IdCard idCard = (IdCard)session.load(IdCard.class,1);
   System.out.println("idcard.cardNo="+idCard.getCardNo());
   System.out.println("idcard.person.name="+idCard.getPerson().getName());
   
   session.getTransaction().commit();
   
  }catch(Exception e){
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally{
   HibernateUtils.closeSession(session);
  } 
 }

4:总hibernate一对一主键关联映射(双向关联Person<----->IdCard)

需要在idcard映射文件中加入<one-to-one>标签指向person,指示hibernate如何加载
person,默认根据主键加载

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值