2016-10-18 6 views
0

Hibernateバージョン:5.2Hibernate:IDの昇順に最後のN行を選択する方法は? (単一クエリで)

サブクエリを使用してsetMaxResults(int)を使用しようとしています。

session.createQuery(
"FROM (SELECT * FROM tickets ORDER BY id DESC limit 3) sub ORDER BY id ASC" 
); 

しかし、HQLサブクエリ選択または句でのみ発生することができ、そして限界が休止状態で使用することができません。

どのように私は休止状態でそれを行うことができますか?


アップデート - などの場合は、それは明らか

ようにするには、ID = 1から10個のデータエントリは、IDにある= 10。

私はさらに、データ処理なし一つだけのクエリ + により、IDの昇順に最後の3つのデータを選択します。

デシベルからの結果は、10

サンキュー= IDへのid = 8となります。

+1

[Hibernate Select Criteria](http://stackoverflow.com/questions/6887643/hibernate-select-top-and-bottom-nrows-with-criteria)を参照してください。 – nbrooks

+0

ありがとうあなたの返事のために。その投稿はちょうど最後の下からn行を取得しますが、idの昇順ではありません。そして、私は2つの質問をして、それをミックスしたくありません。私は1つのクエリがデータを処理せずにdbからデータを取得したい。 – Pika

答えて

0

ids 110とし、最後にN=3としたいとします。

​​

10から1するためにidを返しますあなたのアプローチを撮影します。最後にN=3を昇順で取得します。つまり、IDは31の昇順になります。

最初のNのIDを昇順で選択すると何が問題になりますか?

session.createQuery(
    "FROM tickets ORDER BY id ASC" 
).setMaxResults(n); 
+0

ご返信ありがとうございます。これは私が意味するものではありません。私はそれを明確にするために質問を更新しました。 – Pika

0

あなたはそれを実装するためにQuery setFirstResult(int startPosition)Query setMaxResults(int maxResult)を使用することができます。通常、ページ区切りで使用されます。

ここで降順に最初の3つのレコードを取得できるので、Query setMaxResults(int maxResult)しか使用できません。

+0

私は定数データベースでのみ動作すると思います。たとえば、QUERY.setFirstResult(6).setMaxResults(3)などです。私はあなたが間違ってしまったのですか?動的データベースの場合、追加のクエリを使わずにint startPositionを取得できますか? – Pika

関連する問題