1
很抱歉,如果這是一個愚蠢的問題,但我堅持這個問題了整整一個下午,但無法找到一個解決方案,因爲我不熟悉複雜的SQL:Hibernate選擇groupProperty,rowCount與rowCount> n?
我想找到「前n個MESSAGE-用味精發送計數>閾發送用戶從表「這是我的準則:
Criteria c = session.createCriteria(Message.class);
ProjectionList plist = Projections.projectionList();
plist.add(Projections.groupProperty("user"));
plist.add(Projections.rowCount() , "count");
c.setProjection(plist);
c.addOrder(Order.desc("count"));
c.setFirstResult(0);
c.setMaxResults(count);
這是我可以寫,但它缺乏的」 過濾行與rowCount時超過某個閾值低」。如何使用標準實現它?非常感謝 !
--------------更新------------------------
謝謝@TheStijn , 我試過了 。我現在可以使用子查詢來實現我的目標,但生成的查詢是不是很聰明!查看生成的SQL:
select
this_.fromUser as y0_,
count(*) as y1_
from
Message this_
where
this_.fromUser is not null
and this_.created>?
and this_.created<?
and ? <= (
select
count(*) as y0_
from
Message msg_
where
msg_.fromUser=this_.fromUser
and msg_.fromUser is not null
and msg_.created>?
and msg_.created<?
)
group by
this_.fromUser
order by
y1_ desc limit ?
也就是說,子查詢重複最主查詢的,我認爲這是一個有點多餘。是否有任何建立這樣的SQL查詢的標準:
select
this_.fromUser as y0_,
count(*) as y1_
from
Message this_
where
this_.fromUser is not null
and this_.created>?
and this_.created<?
and y1_ > ? // threshold
group by
this_.fromUser
order by
y1_ desc limit ?
非常感謝!
(這似乎更容易使用HQL要做到這一點,但我對標準的方式好奇)
嗨,我試過了,但得到了'不那麼聰明'的SQL查詢。你能再看一遍嗎?謝謝 。 – smallufo 2011-03-24 15:01:18
你不能在SQL中做一些不可能的事情。由於你不能在sql中的where子句中使用聚合變量(不是在我知道的任何數據庫中),所以你不能在休眠中使用)。如果你的上面的sql正在工作,請告訴我你正在使用哪個數據庫。 – 2011-03-24 15:32:25
謝謝,你是對的,它不起作用。 – smallufo 2011-03-25 03:38:45