hibernate一对一唯一外键关联映射(单向关联Person----->IdCard)

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;

 

 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:配置文件

Person的配置文件

<hibernate-mapping >
  <class name="com.bjsxt.hibernate.Person" table="t_person">
     <id name="id">
         <generator class="native"></generator>
     </id>
     <property name="name"></property>
    <many-to-one name="idCard" unique="true"/>
  </class>
</hibernate-mapping>

 

IdCard的配置文件

<hibernate-mapping >
  <class name="com.bjsxt.hibernate.IdCard" table="t_idcard">
     <id name="id">
         <generator class="native"/>
     </id>
     <property name="cardNo"></property>   
  </class>
</hibernate-mapping>

3:测试程序

//

 public void testSave1(){
  Session session = null;
  try{
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   IdCard idCard = new IdCard();
   idCard.setCardNo("88888888888888");
   
   Person person = new Person();
   person.setIdCard(idCard);
   person.setName("aa");
   
   //不能成功保存,因为idCard是Transient状态
   session.save(person);
   
   session.getTransaction().commit();
   
  }catch(Exception e){
   e.printStackTrace();
   session.getTransaction().rollback();
  }finally{
   HibernateUtils.closeSession(session);
  } 
 }
 

//首先保存IdCard,再保存Person
 public void testSave2(){
  Session session = null;
  try{
   session = HibernateUtils.getSession();
   session.beginTransaction();
   
   IdCard idCard = new IdCard();
   idCard.setCardNo("88888888888888");
   session.save(idCard);
   
   Person person = new Person();
   person.setIdCard(idCard);
   person.setName("aa");
   
   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,5);
   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);
  } 
 }

 

4:总结

hibernate一对一唯一外键关联映射(单向关联Person----->IdCard)

一对一唯一外键关联映射是多对一关联映射的特例

 可以采用<many-to-one>标签,指定多的一端的unique=true;这样就限制了多的一端
 的多重性为一,通过这种手段映射一对一唯一外键关联

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波哥的技术积累

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值