一对一唯一外键关联映射(单向)

简介:
   一对唯一外键关联映射是采用多对一关联映射方法来解决一对一的问题,它就是多对一的一个特例。
       它是基于这样一种思想:在映射多的一端时采用<many-to-one>标签,并且用属性unique=true来限定它是唯一的,这样就实现了多的一端的多重性为一。但是,它仍保留多対一的痕迹(比如关系模型中增加一个外键字段)。
 
1.实体模型:
 
  此处单向是由person加载idcard,所以Person中要保存IdCard的对象。
 
2.关系模型:
 
3.实体类:
  IdCard.java
public  class IdCard { 
   private Integer id; 
   private String cardNo; 
     //一系列的getter.setter方法 
  @Override 
   public String toString() { 
     // TODO Auto-generated method stub 
     return  "Idcard:" + cardNo; 
  } 
}
    Person.java
public  class Person { 
   private Integer id; 
   private String name; 
   private IdCard idCard; 
   //一系列的setter.getter方法 
    
  @Override 
   public String toString() { 
     // TODO Auto-generated method stub 
     return  "Person:" + name; 
  } 
}
 
4.映射文件:
  IdCard.hbm.xml
   < class  name ="com.sxt.hibernate.one2one.entity.IdCard"  table ="sxt_hibernate_idCard" > 
     < id  name ="id"  length ="4" > 
       < generator  class ="native" > </ generator > 
     </ id > 
     < property  name ="cardNo"  length ="10" > </ property > 
   </ class >
   Person.hbm.xml
   < class  name ="com.sxt.hibernate.one2one.entity.Person"  table ="sxt_hibernate_person" > 
     < id  name ="id"  length ="4" > 
       < generator  class ="native" > </ generator > 
     </ id > 
     < property  name ="name"  length ="10" > </ property > 
    <!-- many-to-one标签的含义,是在本表中增加外键指向另一端。    
      unique="true"含义,是本表的本字段加上唯一性约束. 
     
--> 
     < many-to-one  name ="idcard_id"  unique ="true" > </ many-to-one > 
   </ class >
 
5.hibernate配置文件:
   参照上一篇。
 
6.测试方法:
   public  static  void main(String[] args) { 
    Session session = HibernateUtils.getSession(); 
    Transaction t = session.beginTransaction(); 

     try { 
       /** 
        * 测试插入操作 
        */
 
/*      IdCard idCard=new IdCard(); 
      idCard.setCardNo("1234567890"); 
        
      Person person=new Person(); 
      person.setIdCard(idCard); 
      //不能成功保存,会报错org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.sxt.hibernate.one2one.entity.IdCard 
      //因为idCard是transient状态 
      //要在<many-to-one>中加上cascade="save-update",或者是在session.save(person)之前session.save(idCard) 
      session.save(person);*/
 
        
/*      IdCard idCard=new IdCard(); 
      idCard.setCardNo("1234567890"); 
      session.save(idCard); 
        
      Person person=new Person(); 
      person.setName("张三"); 
      person.setIdCard(idCard); 

      session.save(person);*/
 
       /** 
        * 小结:一对一唯一外键关联是多対一关联的特例,它不会默认有cascade属性,因此save对象时要保证它的关联属性是持久化状态的或者手动设置cascade属性. 
        */
 

        
       /** 
        * 测试加载操作 
        */
 
      Person p=(Person)session.load(Person. class, 2); 
      System.out.println(p); 
      System.out.println(p.getIdCard()); 
      t.commit(); 
    }  catch (HibernateException e) { 
      e.printStackTrace(); 
      t.rollback(); 
    }  finally { 
      HibernateUtils.closeSession(session); 
    } 
  } 
}


     本文转自NightWolves 51CTO博客,原文链接: http://blog.51cto.com/yangfei520/274199 ,如需转载请自行联系原作者


相关文章
|
监控 关系型数据库 Linux
|
10月前
|
数据挖掘 OLAP 云计算
[直播预约]StarRocks 2025 Roadmap 全面解读
2月19日19:00-20:30,StarRocks TSC Member赵恒、康凯森将解读2025 Roadmap,并邀请多位专家分享最新进展。欢迎参与交流!
|
数据可视化 uml
UML图讲解(关联关系,单向关联,双向关联,自关联,组合关系,依赖关系,继承关系,实现关系)
UML图讲解,关联关系,单向关联,双向关联,自关联,组合关系,依赖关系,继承关系,实现关系。
6301 0
UML图讲解(关联关系,单向关联,双向关联,自关联,组合关系,依赖关系,继承关系,实现关系)
|
存储 JSON 程序员
Python基础知识点总结
本文包括python基本知识:简单数据结构,数据结构类型(可变:列表,字典,集合,不可变:数值类型,字符串,元组),分支循环和控制流程,类和函数,文件处理和异常等等。
3571 2
Python基础知识点总结
|
存储 前端开发 JavaScript
Retool 是什么,怎么样? Retool 低代码工具测评
Retool 是面向企业的低代码开发平台。使用 Retool 可快速搭建后台管理工具,比如快速构建 admin 后台管理、销售 ERP、客户 CRM、数据分析看板、amazon 云端文件上传管理等基于数据库或 API 的企业工具。 新事物刚出现,没亲身体验前,总是很难理解。我们总会把新事物与我们已认知的东西来做对比,有人说 Retool 是帮你配置好的 Vue & React 、是可视化拖拽编程平台、是在线前端生成器(并不是)。这些说法都只描述了 Retool 很小的一个点,Retool 是新一代低代码开发平台,是程序员的新效率工具,是历史上不曾有的新工具,拿旧地图看新世界总会有很大偏差,建
1498 0
|
供应链 Cloud Native 小程序
浩鲸科技携手阿里云原生共同打造“场域运营数字化解决方案”
日前,浩鲸科技加入阿里云原生合作伙伴计划,并联合发布“场域运营数字化解决方案”,旨在为了帮助更多百购企业从业务、管理、系统三个层面快速构建整体数字化架构。
6903 87
浩鲸科技携手阿里云原生共同打造“场域运营数字化解决方案”
|
架构师 大数据 云计算
全新阿里云大学发布——阿里巴巴全力打造云生态下的创新人才工场
全新阿里云大学正式上线!阿里云大学以“学以致用”为原则,分别从进阶式学习、动手实操、能力测试等环节帮助用户真正的掌握一项技能,真正使用这项技能,并对接到阿里云人才库,推荐到用人单位,形成真正的云生态人才闭环!
16497 0
|
存储 运维 监控
图数据库介绍及应用场景| 学习笔记
快速学习图数据库介绍及应用场景。
图数据库介绍及应用场景| 学习笔记
|
移动开发 安全 数据安全/隐私保护
多端可接入,实现随时随地登录无影云桌面
多端可接入,实现随时随地登录无影云桌面
2770 0
|
缓存 安全 数据安全/隐私保护
CleanMyMac X订阅版使用到期 如何免费永久使用?
cleanmymac支持一键智能清理垃圾,能够帮助用户将Mac恢复到最好的状态,是每一个苹果电脑用户都应该有的一个软件,CleanMyMac是集所有功能于一身的先进程序卸载清理器,只需两个简单步骤就可以把系统里那些乱七八糟的无用文件统统清理掉,节省宝贵的磁盘空间。支持清理Mac系统中多余的语言包、系统缓存、程序,有效帮助苹果系统进行瘦身工作。
1122 0

热门文章

最新文章