我有以下实体:
public class Category { private Integer id; @OneToMany(mappedBy = "parent") private List<Topic> topics; } public class Topic { private Integer id; @OneToMany(mappedBy = "parent") private List<Posts> posts; @ManyToOne @JoinColumn(name = "id") private Category parent; } public class Post { private Integer id; @ManyToOne @JoinColumn(name = "id") private Topic parent; /* Post fields */ }
而且我想使用JPQL查询来获取包含已加入主题和已加入帖子的所有类别。我被写成如下查询:
SELECT c FROM Category c JOIN FETCH c.topics t JOIN FETCH t.posts p WHERE ...
但是我得到了错误
org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
我找到了有关此错误的文章,但这些文章仅描述了在一个实体中有两个要加入的集合的情况。我的问题有点不同,我不知道如何解决。
是否可以在一个查询中执行?
对不起,我的英语不好,但我通常会说其他语言
您可以使用Child-Parent提取策略,并根据结果重新组合实体树。
SELECT p FROM Post p JOIN FETCH p.topic t JOIN FETCH t.category c WHERE ...