2016-10-04 10 views
0

私のSQLクエリは、以下の通りであるので、私は、最後の5つの5行を除くすべての行を返すHibernateクエリを実行しようとしています:Hibernate:最後のN行以外のすべての行を選択する方法は?

session.createQuery("FROM Book 
WHERE id NOT IN(SELECT id FROM Book ORDER BY ID DESC LIMIT 5) 
ORDER BY title"); 

残念ながら、LIMITHibernateで許可されていないので、私は得ましたエラー:

HTTPステータス500 - org.hibernate.hql.internal.ast.QuerySyntaxException: 予期しないトークン:行1近くLIMIT、コラム78 [WHERE ID NOT IN models.Book FROM(からIDを選択モデル。注文書ID DESC LIMIT 5)注文 タイトルby

これをどのように修正できますか?

答えて

2

答えがここにあります

How do you do a limit query in HQL?

リミットHQLでサポートされている条項はなかったです。あなたはsetMaxResults()を使うつもりです。

+0

私は知っていますが、私の場合はこのメソッドを使用することはできません。「LIMITED」の結果をループしてから選択します。私は何かがより良い実行する必要があります:) – Mohammad

1

あなたはhibernate pagination

ファーストを求めているようにカウントします思える:

String countQ = "Select count (f.id) from Foo f"; 
Query countQuery = session.createQuery(countQ); 
Long countResults = (Long) countQuery.uniqueResult(); 

を次に、あなたのリミット開始点と終了点を計算します。

Long start = countResult - limit; 

そして、ページネーション将来を使用します。

Session session = sessionFactory.openSession(); 
Query query = sess.createQuery("From Foo"); 
query.setFirstResult(start); 
query.setMaxResults(limit); 
List<Foo> fooList = fooList = query.list(); 

私は休止状態で「LIMIT」のキーワードの制限に関する質問の似たようなものをも求めているあなたは、クエリを更新する必要があるかもしれませんが、私はあなたのアイデア

0

を得ると信じています。

Hibernate: how to select last N rows in ascending order of id? (in single query)

私はそれが最高のパフォーマンスではないですが、残された唯一の2つの方法があると思います。

  1. 2つのクエリ(IDリストにないと照会、その後、IDのリストを取得)、さらにデータ処理と
  2. つのクエリ(例。結果のリストから最後の5つのデータをチョップ)

助けてくれるといいです

関連する問題