JPA一对多映射相关例子以及查找注意事项

JPA一对多映射例子,两边配置:

拥有mappedBy注解的实体类为关系被维护端,另外的实体类为关系维护端的。顾名思意,关系的维护端对关系(在多对多为中间关联表)的CRUD做操作。关系的被维护端没有该操作,不能维护关系。

//被维护端注解

User:

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = “creater”)
private Set albums;

//维护段注解:

Album:

@ManyToOne(cascade = { CascadeType.REFRESH, CascadeType.MERGE }, optional = false)
@JoinColumn(name = “user_id”)
private User creater;

(这种配置在从Album端查询所有的Album时会产生数据的无限循环获取,造成笛卡尔积重复。因为每个Album中包含了creater,而creater中又有一个Album集合。。。)

mappedBy表明由第二个所在的类维护关系,。 如何反转?mappedBy相当于inverse=”true”;如果想让第一个维护,可以不写这个,按照如下配置:

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Set albums;

删除第二个类中的creater。

这时会生成一张中间表用于维护关系。

arthinking wechat
欢迎关注itzhai公众号