[英]Hibernate JPA recursive query
我有以下查詢,我正在使用JPA提供程序休眠:
entityManager().createQuery(
"SELECT page FROM ProjectPage page"
+" left join fetch page.categorySet as category"
+ " where page.id = :id "
+ " and category.parentCategory is null "
+ " and (category.status is null or category.status != :status_val) "
,ProjectPage.class).setParameter("id", id).setParameter("status_val", Status.DELETED).getSingleResult();
下面分別是ProjectPage
和Category
的實體:
@Entity
@Table(name="project_page")
@Configurable
public class ProjectPage {
@OneToMany( mappedBy = "parentPage")
private Set<Category> categorySet = new HashSet<Category>();
}
@Configurable
@Table(name="category")
@Entity
public class Category{
@OneToMany(cascade = CascadeType.ALL, mappedBy = "parentCategory",fetch=FetchType.EAGER)
private Set<com.se.dataadminbl.model.Category> categorySet = new HashSet<com.se.dataadminbl.model.Category>();
}
在上面的查詢中,我試圖獲取一個ProjectPage
及其categorySet
,如上圖所示,類Category
包含一組其類型,因此每個ProjectPage
對象將包含一組Category
並且該組內的每個對象將包含一組Category
,現在的問題是,當我檢索ProjectPage
對象時,where子句中的條件僅適用於Category
的第一級集合,而不適用於每個Category
內的每個集合,我想進行遞歸查詢,以便可以應用在第n級條件而不是在代碼中做到這一點,我嘗試使用攔截器,但不起作用,如何做到這一點的任何想法?
當您在WHERE子句中引用LEFT JOIN列時,WHERE條件將始終過濾出空值。 因此最終結果是一個INNER JOIN。
JPA和Hibernate都不支持遞歸查詢,因為Hibernate支持的所有數據庫中沒有一個,只有一個標准實現 。
如果您使用PostgreSQL,則可以使用Common Table Expression 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.