当前位置: 首页 > 面试题库 >

一个JPQL查询中的多个JOIN FETCH

袁志专
2023-03-14
问题内容

我有以下实体:

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 ...


 类似资料:
  • 我有以下实体: 在一个查询中完成是可能的?

  • 我现在在大学学习数据库,在我的项目中,我有3个表:、和 联赛(leagueId,leagueName) 团队(teamId,teamName) 具有(leagueId,teamId,year)

  • 问题内容: 我遇到了麻烦。 有一个实体发行人与与实体镇的ManyToMany关系有关: 那么实体镇也与地区有关 现在,我必须过滤(使用jpql)一个区域中的所有分发服务器。我能怎么做? 问题答案: 请参阅:https://en.wikibooks.org/wiki/Java_Persistence/JPQL

  • 问题内容: 我很难优化我的SQLAlchemy查询。我的SQL知识非常基础,我无法从SQLAlchemy文档中获得所需的知识。 假设以下非常基本的一对多关系: 我怎么能: 查询每个父母的元组? 经过相当长的搜索时间后,我发现了如何分别查询这些值: 我试图以不同的方式将它们组合在一起,但没有设法得到我想要的。 查询所有顽皮孩子超过80%的父母?编辑:顽皮可能为NULL。 我猜想此查询将基于上一个查询

  • 问题内容: 我有以下查询: 所以我正在使用并抓住。所以现在,我要获取该image_id并将其从图像表中转换成。 如何将其添加到查询中? 问题答案: 您可以简单地添加另一个联接,如下所示: 但是请注意,由于它是一个,如果您的消息中没有图像,则将跳过整个行。如果可能的话,您可能需要执行一次操作,该操作将仅在存在一个仪表板消息的情况下返回所有仪表板消息和一个image_filename(否则,您将获得n

  • “CREATE和LOAD CSV之间需要WITH(第9行,第1列(偏移量:211))”CREATE(project:project{projectid:project_line.projectID})“ 我不清楚WITH语句应该如何构造。