申し訳ありませんが、それはばかな質問ですが、私は、全体の午後のために、この問題にこだわってきましたが、私は複雑なSQLと熟練していないよので、解決策を見つけることができない場合:HibernateはgroupPropertyを選択し、rowCountはrowCount> nですか?
私は "上位n message-を見つけたいですMSG送信され、カウント>しきい値でテーブルからユーザーを送信する「これが私の基準です:
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 、 私は試した 。私は今私の目標を達成するためにサブクエリを使用することができますが、生成されたクエリはでありませんので、巧妙で!
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を参照してください。このような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
sqlでは不可能な何かをhibernateで行うことはできません。 SQLのwhere句で集計変数を使用することはできません(少なくとも私が知っているデータベースではない)、これは休止状態では実行できません。上記のSQLが動作している場合、使用しているDBを教えてください。 –
ありがとうございます、そうです、それは動作しません。 – smallufo