0%
这是一片思考的空间 -- arthinking
Spring 重构&代码整洁之道 软件设计 JVM 并发编程 数据结构与算法 分布式 存储 网络 微服务 设计模式
Java技术栈 - 涉及Java技术体系

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。

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

欢迎关注我的其它发布渠道