• 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来做的。我们不必在这上面花费过多的精力。如果,你感兴趣,也可以自己研究思考一下。 
  • 相关阅读:
    (29)zabbix执行远程命令
    (28)zabbix用户宏变量详解macro
    CentOS7安装Nginx及配置
    Open-Falcon 监控系统监控 MySQL/Redis/MongoDB 状态监控
    Centos7安装ansible
    Centos7部署open-falcon 0.2
    Centos7安装redis
    vim常用命令
    CentOS7安装配置Bacula yum方法
    CentOS7时间同步
  • 原文地址:https://www.cnblogs.com/MAPO/p/8510268.html
Copyright © 2020-2023  润新知