2016-04-26 8 views
3

私はGrailsのHQLにこのような何かをしようとしているため動作しませんが、それは、私はIDのリストのうち、5つの要素のアップに削除するのGrailsのexecuteUpdateは削除

に動作しません10個の要素を含むことができます。私は、日付によってそれらを注文し、最古の5

Entity.executeUpdate(
     "DELETE FROM Entity WHERE id in (:list) ORDER BY date LIMIT 5", 
     [list: oldestIdsForRemoval]) 

ピュアSQLがうまく

DELETE FROM entity WHERE id in ('8f027db299354a869af51e1f0a60ede1', '96df61161c32491f8aa4a14c5017852c', '88aa7b2bb6e1444f8d892fff10b8adcd') ORDER BY date ASC LIMIT 1 

も可能です。この作品のみ削除しますか? 私もパラメータのリストにmax:5パラメータを追加しようとしましたが、失敗します。

Grails 1.3.6を使用しています。私はそれを使用することはできませんが、それは新しいバージョンで修正されている場合は、知って良いだろう。 http://grails.github.io/grails-doc/1.3.7/ref/Domain%20Classes/executeUpdate.html

答えて

1

HQLを使用する場合、Hibernateのユーザガイドの使用を検討してください。これは、言語をかなりうまくカバーするHQLに関するセクションを含んでいます。ここでは、ルートディレクトリです:https://docs.jboss.org/hibernate/orm/

もう一つのソースは、より不可解1かかわらず、HQLコードを解析するために使用されるパーサーのANTLR源である:https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/main/antlr/hql.g

それはあなたが結論に達することがありANTLRコードからです私がしたように、HQLはLIMITをサポートしていません。この場合、いくつかのオプションがあります。

  1. 2つのクエリを使用します。 A SELECTを最大と一緒にIDを選択し、次にDELETEを特定のIDに対して選択します。
  2. 代わりにネイティブクエリ(SQLなど)を使用して、基盤となるデータベースに完全にアクセスできるようにします。
関連する問題