[英]Cannot writing JPQL query with subquery in FROM clause - Spring Data Jpa - Hibernate
[英]JPQL/Hibernate query with Subquery in SELECT clause
我有一組JPA實體類,如下所示(簡化):
@Entity(name="region")
public class Region {
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
protected Long id;
}
@Entity(name="user")
public class User {
@OneToMany(fetch = FetchType.EAGER)
@JoinTable
(
name="user_region",
joinColumns={ @JoinColumn(name="user_id", referencedColumnName="id") },
inverseJoinColumns={ @JoinColumn(name="region_id", referencedColumnName="id", unique=true) }
)
protected Set<Region> regions;
}
每個用戶可以通過user_region表與0個或更多區域相關聯。
使用JPQL,我試圖創建一個查詢,該查詢將為我提供Object []列表,其中第一項是區域,第二項是分配給該區域的用戶數。
在單個區域中執行此操作很容易:
"select count(u) from " + User.class.getName() + " u " +
"where :region member of u.regions"
這很好。
但是我希望不必為每個區域的調用而煩惱數據庫,因此希望將它們放在一起。 我努力了:
"select r, (" +
" select count(u) from " + User.class.getName() + " u " +
" where r member of u.regions " +
") from " + Region.class.getName() + " r " +
"where r in :regionList";
但這會導致每個區域的計數為零(這不正確,因為單選擇會返回非零結果)。
查看相關問題的答案,似乎SELECT部分中的子選擇不起作用,因為它們僅在WHERE和HAVING部分中被允許,但這不會引發任何語法異常,它的計數結果為零,所以我對此不確定。
誰能告訴我如何重新處理查詢以在多個區域工作?
結合使用JPA 2.0和Hibernate 4.2
您可以使用以下方法實現此目的:
select r, count(u) from " + User.class.getName() + " u inner join u.regions r where r in :regionList group by r
這對於沒有用戶的區域可能不起作用,如果不需要用戶,則可以使用右聯接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.