主键关联和唯一主键

Hibernate 一对一关联映射(主键关联VS唯一外键关联)

博客分类:  Hibernate
Hibernate XML SQL 生活 
一对一关联映射有两种:一种是主键关联,一种是“唯一”外键关联。 
主键关联:原理是两张表的主键(ID)保持一致,在获取的时候根据两种表中的ID相同来作为关系判断的标准,这样的设计好处在于我们不用添加另外的字段来维护它们之间的关系。 
废话少说,看例子。 
在生活一对一的关系还“算”挺多的,比如人与自己的省份证,丈夫和妻子(当然是在符合中国国情的情况下)等等。 
第一步:建立两张表。 
TABLE:husband 
Sql代码   收藏代码
  1. create table husband(  
  2. h_id int primary key,  
  3. h_name varchar(20)  
  4. );  

TABLE:wife 
Sql代码   收藏代码
  1. create table wife(  
  2. w_id int primary key,  
  3. w_name varchar(20)  
  4. );  

注意:这两张表没有使用外键来关联它们。 
第二步:建立PO对象。 
JAVA PO :HusbandPO.java 
Java代码   收藏代码
  1. package com.lovo.po;  
  2. public class HusbandPO {  
  3.   private int id;  
  4.       
  5.   private String name;  
  6.       
  7.   private WifePO myWife; //注意包含了一个妻子对象  
  8.   
  9.   ... other getXX setXX ...  
  10. }  

JAVA PO :WifePO.java 
Java代码   收藏代码
  1. package com.lovo.po;  
  2. public class WifePO {  
  3.   private int id;  
  4.       
  5.   private String name;  
  6.       
  7.   private HusbandPO myHus; //注意包含了一个丈夫对象  
  8.   
  9.   ... other getXX setXX ...  
  10. }  

第三步:在XX.hbm.xml中配置PO对象属性与数据库表字段的映射。 
HusbandPO.hbm.xml 

Xml代码   收藏代码
  1.  <hibernate-mapping>  
  2.       
  3.     <class name="com.lovo.po.HusbandPO" table="husband">  
  4.         <id name="id" column="h_id" type="int">  
  5.             <generator class="increment">generator>  
  6.         id>  
  7.         <property name="name" column="h_name" type="string">property>  
  8.           
  9.         <one-to-one name="myWife" class="com.lovo.po.WifePO" cascade="all">one-to-one>  
  10.     class>  
  11. hibernate-mapping>  

WifePO.hbm.xml 

Xml代码   收藏代码
  1. <hibernate-mapping>  
  2. <class name="com.lovo.po.WifePO" table="wife" >  
  3.     <id name="id" column="w_id" type="int">  
  4.         <generator class="foreign">  
  5.               
  6.             <param name="property">myHusparam>  
  7.         generator>  
  8.     id>  
  9.     <property name="name" column="w_name" type="string">property>  
  10.     <one-to-one name="myHus" class="com.lovo.po.HusbandPO"  cascade="all">one-to-one>   
  11. class>  
  12. lt;/hibernate-mapping>  


唯一外键映射:记住是“唯一”,因为一对一是多对一的一种特例,且在hibernate-mapping中是利用来表示,这个时候需要指明该标签的unique="true",这才算是一对一,否则就是多对一。 
例子还是使用上面的一一制夫妻关系。 
第一步:只需要在两张表的其中一张中加上一个外键,我这里在wife身上加(没有别的意思  )。 
TABLE:husband 
Sql代码   收藏代码
  1. create table husband(  
  2. h_id int primary key,  
  3. h_name varchar(20)  
  4. );  

TABLE:wife 
Sql代码   收藏代码
  1. create table wife(  
  2. w_id int primary key,  
  3. w_name varchar(20),  
  4. fk_hus_id int foreign key(fk_hus_id)   
  5. references husband(h_id)  
  6. );  

第二步:上面是写PO ,这里也不例外,不过PO对象没有改变过哈,这里不复写了。 
第三步:XX.hbm,xml配置,配置与上面有所区别,注意啦…… 
HusbandPO.hbm.xml 
Xml代码   收藏代码
  1. <hibernate-mapping>   
  2.     <class name="com.lovo.po.HusbandPO" table="husband">  
  3.         <id name="id" column="h_id" type="int">  
  4.             <generator class="increment">generator>  
  5.         id>  
  6.         <property name="name" column="h_name" type="string">property>   
  7.         <one-to-one name="myWife" class="com.lovo.po.WifePO"  
  8.         property-ref="myHus" cascade="all">one-to-one>  
  9.           
  10.     class>  
  11. hibernate-mapping>  


WifePO.hbm.xml 
Xml代码   收藏代码
  1. <hibernate-mapping>  
  2.     <class name="com.lovo.po.WifePO" table="wife" >  
  3.         <id name="id" column="w_id" type="int">  
  4.               
  5.             <generator class="increment">generator>  
  6.         id>  
  7.         <property name="name" column="w_name" type="string">property>  
  8.         <many-to-one name="myHus" class="com.lovo.po.HusbandPO"  cascade="all"  
  9.         unique="true" column="fk_hus_id">many-to-one>   
  10.           
  11.     class>  
  12. hibernate-mapping>  
  • 一对一主键映射示例.rar (1.1 MB)
  • 下载次数: 19
  • 一对一唯一外键关联.rar (1.1 MB)
  • 下载次数: 28
2 
3 
分享到:   
Caused by: org.springframework.beans.fac ... |  Hibernate一级缓存和二级缓存
  • 2010-07-29 00:21
  • 浏览 2322
  • 评论(0)
  • 分类:企业架构
  • 相关推荐
评论
发表评论

 您还没有登录,请您登录后再发表评论

12345678
  • 浏览: 32319 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
mm_linbin
dylinshi126
cangtiankegu
风之豪
文章分类
  • 全部博客 (40)
  • Java (4)
  • Struts 1.XX (3)
  • Spring (1)
  • Hibernate (6)
  • Servlet (3)
  • Flex (1)
  • PHP (1)
  • JSP (1)
  • Oracle (3)
  • SQLserver (1)
  • Javascript (1)
  • AJAX (1)
  • API (0)
  • 设计模式 (1)
  • Exceptions (4)
  • 资源共享 (7)
  • 文件存放2 (0)
  • Python (0)
  • AngularJS (2)
社区版块
  • 我的资讯 (0)
  • 我的论坛 (32)
  • 我的问答 (2)
存档分类
  • 2012-10 (2)
  • 2012-09 (1)
  • 2012-02 (2)
  • 更多存档...
最新评论
  • liveonnoevil: 很不错哦~
    JSP Model1与JSP Model2的区别
  • yongdi2: 无论如何都要顶
    Thinking in java中文版chm格式和大家一起分享
  • msn877763580: 讲的还不够深入啊
    Java中栈内存与堆内存的分配--简谈
  • Technoboy: 基于rownum,rownum会在查询时产生!
    Oracle 分页SQL
  • 12345678:

你可能感兴趣的:(主键关联和唯一主键)