一尘不染

一个JPQL查询中的多个JOIN FETCH

hibernate

我有以下实体:

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

我找到了有关此错误的文章,但这些文章仅描述了在一个实体中有两个要加入的集合的情况。我的问题有点不同,我不知道如何解决。

是否可以在一个查询中执行?

对不起,我的英语不好,但我通常会说其他语言


阅读 429

收藏
2020-06-20

共1个答案

一尘不染

您可以使用Child-Parent提取策略,并根据结果重新组合实体树。

SELECT p 
FROM Post p 
JOIN FETCH p.topic t 
JOIN FETCH t.category c 
WHERE ...
2020-06-20