spring jpa 中, entity 不能同时 eager fetch 多个嵌套的集合类型的属性?

284 天前
 papertiger9919

拼接查询如下:

Root<JpaUser> root = criteriaQuery.from(JpaUser.class)
Fetch<Object, Object> blogList = root.fetch("blogList", JoinType.LEFT);
Fetch<Object, Object> textList = blogList.fetch("textList", JoinType.LEFT);
List<JpaUser> resultList = em.createQuery(criteriaQuery).getResultList();
报错:cannot simultaneously fetch multiple bags......[blogList, textList]
大致意思是不能同时 fetch blogList 和 textList

问了 gpt ,回答如下: 假设有三个实体类 A 、B 和 C ,
A 和 B 是一对多关系,B 和 C 也是一对多关系。
尝试使用 FetchType.EAGER 获取 A 实体的 B 集合属性( List 或 Set ),
并同时使用 FetchType.EAGER 获取 B 实体的 C 集合属性( List 或 Set )时,
JPA 将会在一次查询中获取 A 、B 和 C 实体的所有数据,这可能导致查询结果中出现大量的冗余数据。

集合属性用的是 List 声明,把 List 改成 Set 就可以了,但是 Set 没有顺序不方便,
按理说 fetch(join) 多个表应该没问题,为什么 jpa 不支持?如何实现 fetch 多个 List 属性呢?

443 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/960917

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX