2011-02-15 58 views
0

我有多個表:的Hibernate查詢計數

  1. 投票
  2. 問題
  3. 回答

每個表都有一個屬於AuthorID場。

我想輸出一個sql查詢:

MemberId1。 (Nbr the Question + Nbr of Question + Nbr of Answer)

MemberId2。 (投票數+問題答案+答案總數)

MemberId3。 (得票數+問題答案+答案總數)

如何使用Hibernate標準來執行此查詢?

在普通的SQL我認爲這將是這樣的:

select sum(val) from (

select count(*) val from a 

union all 

select count(*) val from b 

union all 

select count(*) val from c 

union all 

select count(*) val from d) 
+0

爲什麼標準?它是一個動態查詢嗎? – 2011-02-15 15:00:13

+0

如果不提供有關類模型的信息,您絕不應該問hibernate查詢問題。有了Hibernate,你在做oop,所以你不必太在意桌子,但你高度依賴於班級結構。 – 2011-02-15 15:03:37

回答

0

這應該做的伎倆,只要您映射作者和三個實體之間的一個一對多的關係:

Criteria criteria = session.createCriteria(Author.class, "author"); 
criteria.createAlias("author.votes", "v", Criteria.LEFT_JOIN); 
criteria.createAlias("author.questions", "q", Criteria.LEFT_JOIN); 
criteria.createAlias("author.answers", "a", Criteria.LEFT_JOIN); 
criteria.setProjection(
    Projections.projectionList().add(Projections.groupProperty("author.id")) 
           .add(Projections.countDistinct("v.id")) 
           .add(Projections.countDistinct("q.id")) 
           .add(Projections.countDistinct("a.id"))); 

編輯:

但因爲查詢不是動態的,你應該更喜歡HQL,這將使你寫下你的查詢即使沒有關係的映射關係作者:

select author.id, count(distinct(v.id)), count(distinct(q.id)), count(distinct(a.id)) 
from Author author, Vote v, Question q, Answer a 
where v.author.id = author.id 
and q.author.id = author.id 
and a.author.id = author.id 
group by author.id