zoukankan      html  css  js  c++  java
  • JPA一对一双向

     这次,我们引用一个新的数据模型:丈夫(husband) 和 妻子(wife)。前提:众所周知,在我们伟大的祖国,法律上只存在一种婚姻关系,一夫一妻制。所以,一个丈夫只能有一个妻子,一个妻子也只有一个丈夫。(大家千万别较真,我已经限定了场景,法律上只允许一夫一妻。小三不在本例研究范围内)
          对于这种数据模型来说,双向一对一关系已经很明显了。我们通过丈夫应该能找到他的妻子。同样,通过妻子,应该能找到她的丈夫。
     
     
    好了,让我们来看例子吧:
     
    @Entity
    @Table(name = "husband")
    public class Husband (){
         
         @Id  //JPA注释: 主键 
         @GeneratedValue(strategy = GenerationType.AUTO)   //设置 id 为自增长
         private Long id;
     
         private String name;

         //由于,husband 是这个一对一的关系的主控方,所以,在husband表中添加了一个 wife 的外键。
         //通过这个外键来维护 people和pet的一对一关系,而不是用第三张码表。这个是通过@JoinColumn注释实现的。
         @OneToOne //JPA注释: 一对一 关系
         @JoinColumn(name="wife_fk" )// 在husband中,添加一个外键 "wife_fk"
         private Wife wife;
     
         //省略 get / set  方法...
    }
     
     
     
     
    @Entity
    @Table(name = "wife")
    public class Wife (){
         
         @Id  
         @GeneratedValue(strategy = GenerationType.AUTO)  
         private Long id;
     
         private String name;
     
         //注意:由于是双向的一对一关系。作为关系的被维护端。需要在wife实体中添加和 husband 关联的属性
         //mappedBy 注释:指定了,这个实体是被关系维护端的那个属性所维护。
         //在本例中,Wife实体是被 Hhusband实体中的外键“wife”所维护。
         @OneToOne(mappedBy="wife")
         private Husband husband;
        
         //省略 get / set  方法...
    }
     
          那么,现在已经很明显了。在Wife 的 Model 中,已经找到了与 Husband 关联的属性了。但是,如果进入到数据库中查看Wife这张表,你并不会在表里找到关联到Husband的外键。为什么会这样呢?因为,我们定义关系的时候,规定了关系的维护端是Husband。所以,只有Husband中有管理到Wife的外键。而这个一对一关系,就是靠这个外键来维护的。那当我们设置了,mappedBy后,使关系成为双向的时候,是怎样通过Wife实体来得到她对应的Husband实体的呢?这都是由JPA来做的。我们不必在这上面花费过多的精力。如果,你感兴趣,也可以自己研究思考一下。 
  • 相关阅读:
    WMI远程添加修改用户
    C#中利用mediaplayer打造mp3播放器
    使用BackgroundWorker 实现文件下载、异步提示
    asp.net 修改图片的分辨率,修改图片的长宽象素比例,修改图片的物理宽度大小
    修改注册表,让组策略对管理员无效
    一款支持CHM格式的安卓阅读器:ireader
    一款超好用的PDF阅读器:智器阅读
    C#基础温习(8):命名空间介绍
    书籍推荐:《职场潜伏心理学:全世界最权威的88个心理学定律》
    C#基础温习(10):C#实现托盘功能
  • 原文地址:https://www.cnblogs.com/MAPO/p/8510268.html
Copyright © 2011-2022 走看看