簡體   English   中英

Hibernate JPA遞歸查詢

[英]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();

下面分別是ProjectPageCategory的實體:

@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級條件而不是在代碼中做到這一點,我嘗試使用攔截器,但不起作用,如何做到這一點的任何想法?

  1. 當您在WHERE子句中引用LEFT JOIN列時,WHERE條件將始終過濾出空值。 因此最終結果是一個INNER JOIN。

  2. JPA和Hibernate都不支持遞歸查詢,因為Hibernate支持的所有數據庫中沒有一個,只有一個標准實現

  3. 如果您使用PostgreSQL,則可以使用Common Table Expression

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM