JPA关系主控方笔记
2019-08-06 本文已影响0人
向天葵
@OneToOne
- JoinColumn必须配置在关系维护端即主控方上面
- 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<--->m 多的一方为关系维护端,关系维护端负责外键记录的更新.关系被维护端是没有权利更新外键字段的.
- mappedBy有关的规则(参见@OneToOne第二条)
@ManyToMany
- 使用维护关联关系的一方获取, 还是使用不维护关联关系的一方获取, SQL 语句相同。
- 插入的时候关系双方都需要设置关联。
具体例子可以参考这篇文章