hibernate一对一关系映射

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

分类: 

 

 主键关联:

 

        1、两个实体对象的主键一样,以表明它们之间的一一对应关系;

        2、不需要多余的外键字段来维护关系,仅通过主键来关联,即Person的主键要依赖IdCard的主键,他们共用一个主键值。

        以上两点恰与唯一外键关联相反。

 

 主键关联的关系模型

 Person.hbm.xml

[html] view plain copy

 print?

  1.   
  2.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4.   
  5.       
  6.           
  7.           
  8.               
  9.                 idCard  
  10.               
  11.           
  12.           
  13.           
  14.            
  15.           
  16.       
  17.   

生成的表结构以及测试数据:

 

唯一外键关联:

 

       1、两个实体对象用一个外键来关联,以表表明对象之间的关系。

       2、其实它是多对一关联映射的特例,多的一端加上唯一的限制之后,用来表示一对一的关联关系。

       所以它采用多对一的标签来映射,如下所示:

[html] view plain copy

 print?

  1.   
  2.   

唯一外键的关系模型

Person.hbm.xml

[html] view plain copy

 print?

  1.   
  2.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4.   
  5.       
  6.           
  7.               
  8.           
  9.           
  10.           
  11.           
  12.               
  13.       
  14.   

生成的表结构以及测试数据:

 

 

其他相同代码如下:

Person

[java] view plain copy

 print?

  1. public class Person {  
  2.     private int id;  
  3.     private String name;  
  4.     private IdCard idCard;  
  5.       
  6.     public IdCard getIdCard() {  
  7.         return idCard;  
  8.     }  
  9.     public void setIdCard(IdCard idCard) {  
  10.         this.idCard = idCard;  
  11.     }  
  12.     public int getId() {  
  13.         return id;  
  14.     }  
  15.     public void setId(int id) {  
  16.         this.id = id;  
  17.     }  
  18.     public String getName() {  
  19.         return name;  
  20.     }  
  21.     public void setName(String name) {  
  22.         this.name = name;  
  23.     }  
  24. }  

IdCard

[java] view plain copy

 print?

  1. public class IdCard {  
  2.     private int id;  
  3.     private String cardNo;  
  4.     public int getId() {  
  5.         return id;  
  6.     }  
  7.     public void setId(int id) {  
  8.         this.id = id;  
  9.     }  
  10.     public String getCardNo() {  
  11.         return cardNo;  
  12.     }  
  13.     public void setCardNo(String cardNo) {  
  14.         this.cardNo = cardNo;  
  15.     }  
  16. }  

IdCard.hbm.xml

[html] view plain copy

 print?

  1.   
  2.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4.   
  5.       
  6.           
  7.               
  8.           
  9.           
  10.       
  11.   

建议

 

由于一对一主键关联映射具有以下两个缺点:

      1、灵活性差,没有办法改成多对一关联映射,不能应变多变的需求;

      2、必须先保存关联对象IdCard,之后才能保持Person;

所以,在映射一对一单向关联映射时,我们采用唯一外键关联映射。

转载于:https://my.oschina.net/chengzz/blog/760416

你可能感兴趣的:(java,python)