2011-02-11 52 views
2

我正在嘗試做一個標準查詢,返回像常見問題一樣的最常見的問題。條件查詢:按次數排序

一個問題包含多個答案。

我試圖用標準查詢返回按每個問題的答案數量排列的回答最多的問題。

任何人都知道我應該在hibernate標準util中使用什麼?

+0

你有正在工作的SQL,你可以發佈? – 2011-02-11 15:35:23

+0

不是。我甚至不知道我怎麼會在普通的sql中執行這個查詢 – 2011-02-11 15:37:18

回答

7
Criteria criteria = session.createCriteria(Question.class, "q"); 
criteria.createAlias("q.answers", "answer", Criteria.LEFT_JOIN); 
criteria.setProjection(Projections.projectionList().add(Projections.groupProperty("q.id")) 
                .add(Projections.count("answer.id").as("numberOfAnswers"))); 
criteria.addOrder(Order.desc("numberOfAnswers")); 

這將返回對象[]的列表。每個Object []包含問題的ID作爲第一個元素,以及這個問題的答案的數量作爲第二個元素。問題按答案的降序排列。

如果你需要額外的屬性(例如:問題文本),然後添加其他groupProperty預測(例如:add(Projections.groupProperty("q.text"))

的SQL與此對應的條件查詢看起來是這樣的:

select this_.ID_QUESTION as y0_, count(answer1_.ID_ANSWER) as y1_ from QUESTION this_ left outer join ANSWER answer1_ on this_.ID_QUESTION=answer1_.ID_QUESTION group by this_.ID_QUESTION order by y1_ desc;