美文网首页
JPA关系主控方笔记

JPA关系主控方笔记

作者: 向天葵 | 来源:发表于2019-08-06 23:06 被阅读0次

    @OneToOne

    1. JoinColumn必须配置在关系维护端即主控方上面
    2. mappedBy属性只能配置在被维护方类中的@OneToOne注解中。(可以理解为只要有mapedBy这个两个词出现,那么该类就是被维护端。这一条规则同样适用于一对多和多对多关系

    比如

    
    /**
     * person属于关系维护方
     *
     */
    @Entity
    @Table(name="t_one_person")
    public class Person {
     
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        private Integer id;
        
        @Column(length=10,nullable=false)
        private String name;
        
        /*
         * 双向关系一对一
         * @JoinColumn在JPA中成为连接列,目的是在Person实体表中生成一个IDCard实体
         * 的外键关系.外键列明可以用name指定,如果不指定,默认为目标实体对象名和_ID组合.
         * 拥有@JoinColumn的是关系维护方.
         */
        @OneToOne(cascade=CascadeType.ALL,optional=false)
        @JoinColumn(name="idCard_id")
        private IDCard idCard;
        //省略get/set方法...
    
    /**
     * 为关系被维持方
     *
     */
    @Entity
    @Table(name="t_one_idcard")
    public class IDCard {
     
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        private Integer id;
        
        @Column(length=18,nullable=false)
        private String cadno;
        
        /*
         * 双向关联:一对一
         * mappedBy:反转.出现该属性的是关系被维护方,所指向的则是关系维护方.
         */
        @OneToOne(cascade={CascadeType.PERSIST,CascadeType.REFRESH,CascadeType.MERGE},mappedBy="idCard",optional=false,fetch=FetchType.EAGER)
        private Person person;
           //省略get/set方法...
    }
    

    @OneToManey

    在JPA规范中:

    1. 1<--->m 多的一方为关系维护端,关系维护端负责外键记录的更新.关系被维护端是没有权利更新外键字段的.
    2. mappedBy有关的规则(参见@OneToOne第二条)

    @ManyToMany

    1. 使用维护关联关系的一方获取, 还是使用不维护关联关系的一方获取, SQL 语句相同。
    2. 插入的时候关系双方都需要设置关联。
      具体例子可以参考这篇文章

    相关文章

      网友评论

          本文标题:JPA关系主控方笔记

          本文链接:https://www.haomeiwen.com/subject/nmigdctx.html