Zap*_*any 26 java hibernate jpa join jpql
我有以下实体:
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 */
}
Run Code Online (Sandbox Code Playgroud)
我希望使用JPQL查询获取所有已加入主题的类别并加入帖子.我写的查询如下:
SELECT c FROM Category c JOIN FETCH c.topics t JOIN FETCH t.posts p WHERE ...
Run Code Online (Sandbox Code Playgroud)
但我得到了错误
org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
Run Code Online (Sandbox Code Playgroud)
我发现了有关此错误的文章,但这些文章仅描述了在一个实体中要加入的两个集合的情况.我的问题有点不同,我不知道如何解决它.
可以在一个查询中执行吗?
抱歉我的英语不好,但我通常用其他语言说话
Vla*_*cea 38
您可以使用Child-Parent提取策略并从结果中重新组合实体树.
SELECT p
FROM Post p
JOIN FETCH p.topic t
JOIN FETCH t.category c
WHERE ...
Run Code Online (Sandbox Code Playgroud)
这是复杂联接和多重条件的工作示例:
String query_findByProductDepartmentHospital = "select location from ProductInstallLocation location "
+ " join location.product prod " + " join location.department dep "
+ " join location.department.hospital hos " + " where prod.name = :product "
+ " and dep.name.name = :department " + " and hos.name = :hospital ";
@Query(query_findByProductDepartmentHospital)
ProductInstallLocation findByProductDepartmentHospital(@Param("product") String productName,@Param("department") String departName, @Param("hospital") String hospitalName);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48022 次 |
| 最近记录: |