JPA关系主控方笔记

2019-08-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. 插入的时候关系双方都需要设置关联。
    具体例子可以参考这篇文章
上一篇下一篇

猜你喜欢

热点阅读