hibernate 映射关系 一对一

雨点打透心脏的1/2处 2022-01-11 01:57 495阅读 0赞

一对一 :

1.唯一外键关联

Person 类:

public class Person {

  1. **private** Integer id ;
  2. **private** String name ;
  3. **private** PersonInfo personInfo ;
  4. ...

映射文件:

  1. < class name = *"Person"* >
  2. < id name = *"id"* >
  3. < generator class = *"native"* ></ generator >
  4. </ id >
  5. < property name = *"name"* ></ property >
  6. < many-to-one name = *"personInfo"* class = *"PersonInfo"* column = *"personInfoId"* unique = *"true"* ></ many-to-one >
  7. </ class >

PersonInfo 类:

public class PersonInfo {

  1. **private** Integer id ;
  2. **private** String info ;
  3. ...

映射文件:

  1. < class name = *"PersonInfo"* >
  2. < id name = *"id"* >
  3. < generator class = *"native"* ></ generator >
  4. </ id >
  5. < property name = *"info"* ></ property >
  6. </ class >

表结构:

person 表

20130711120752281

![Image 1][]

personInfo 表

![Image 1][]

20130711120735890

结论:

  1. 从表结构看:
  2. person 表中有一个外键指向 personInfo 中某条数据,即实现了一对一
  3. 从面相对象看:
  4. Person 类中有 有一个 personInfo 属性(不是集合)及表明了一个 Person对象对应一个personInfo 对象

2.联合组建关联:

类文件不变;

映射文件:

  1. < class name = *"Person"* >
  2. < id name = *"id"* >
  3. <!--
  4. 因为主键不是自己生成的,而是作为一个外键(来源于其它值),所以使用foreign生成策略
  5. foreign:使用另外一个相关联的对象的标识符,通常和<one-to-one>联合起来使用。
  6. 再使用元素 <param>的属性值指定相关联对象(这里Person相关联的对象为PersonInfo,
  7. 则标识符为PersonInfo的id)为了能够在加载person数据同时加载PersonInfo数据,
  8. 所以需要使用一个标签<one-to-one>来设置这个功能。
  9. -->
  10. < generator class = *"foreign"* >
  11. <!-- 元素<param>属性name的值是固定为property -->
  12. < param name = *"property"* > personInfo </ param >
  13. </ generator >
  14. </ id >
  15. < property name = *"name"* ></ property >
  16. <!-- <one-to-one>标签
  17. 表示如何加载它的引用对象(这里引用对象就指idCard这里的name值是idCard),同时也说是一对一的关系。
  18. 默认方式是根据主键加载(把person中的主键取出再到IdCard中来取相关IdCard数据。)
  19. 我们也说过此主键也作为一个外键引用 了IdCard,所以需要加一个数据库限制(外键约束)constrained="true"
  20. -->
  21. < one-to-one name = *"personInfo"* constrained = *"true"* ></ one-to-one >
  22. </ class >

………

没有变化;

  1. < class name = *"PersonInfo"* >
  2. < id name = *"id"* >
  3. < generator class = *"native"* ></ generator >
  4. </ id >
  5. < property name = *"info"* ></ property >
  6. </ class >

表结构:

person 表:

![Image 1][]

20130711120803062

personInfo 表

![Image 1][]

20130711120809281

person 表中的主键 可以看成是指向personInfo的外键。 及和personInfo 共享之间

但是在 有一点在存储 person 是 personInfo 必须有存在。

在person 的映射文件中 : < one-to-one name = “personInfo” constrained = “true” ></ one-to-one > 中 constrained 属性为true表示 外键约束 表示该表的主键关联生成

[Image 1]:

发表评论

表情:
评论列表 (有 0 条评论,495人围观)

还没有评论,来说两句吧...

相关阅读