拼接查询如下:
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 属性呢?