2011-11-16 6 views
11

私はすべてのインスタンスを削除する必要があるドメインクラスウィジェットを持っています。その後、私は新鮮なデータを読み込みます。あなたはこれを行うための仕組みとして何を提案していますか?grailsテーブル/ドメインクラスのすべてのデータを削除します。つまり、 "deleteAll"

P.S.これはブートストラップ時ではなく、「実行時」であることに注意してください。

+0

これもhttp://stackoverflow.com/a/に答えているが10278312/329954 – JesperSM

答えて

42

最も簡単な方法は、直接HQLを使用することです、

DomainClass.executeUpdate('delete from DomainClass') 
+0

すばらしい、ありがとう、これは非常に速く働く。 (これとは無関係に、フィルタがフィルタ/スプリットラインの質問で私にとってうまくいかない理由について考えてみましたか? – Ray

+0

これはGrailsの最新バージョンで動作します。 2.4.4ではまだありません。 – Gab

+0

@ataylorドメインクラスに関連がある場合はどうなりますか?通常、このDomainClassだけでなく、すべてを削除したいと考えています –

3
DomainClass.findAll().each { it.delete() } 

をあなたは、このようなすぐにオブジェクトを削除する必要が、それは実際に削除されることを確認するためのチェックなど任意のGORMの落とし穴を回避したい場合いくつかの引数を追加してください。

DomainClass.findAll().each { it.delete(flush:true, failOnError:true) } 
+4

これは、コレクション全体をデータベースからメモリにロードし、それぞれを別々のデータベースクエリで個別に削除することに注意してください。データベースへのラウンドトリップの数のために、削除するオブジェクトが複数あるだけであれば、このパフォーマンスはひどくなります。 – GreenGiant

-1

あなたがオブジェクトのリストを持っており、すべての要素を削除したい場合は、*演算子を使用することができます。

'*' will split the list and pass its elements as separate arguments. 

例。

List<Book> books = Book.findAllByTitle('grails') 
books*.delete() 
0

私が学んだことから、私は同意する@ataylor何の団体があなたのドメインオブジェクト(任意の実際のアプリケーションでは非常に低い)に存在しない場合、以下のコードは最速です:

DomainClass.executeUpdate('delete from DomainClass') 

しかし、あなたの場合削除する最も安全な方法その後、他のドメインとのassiciationsを持っている(とも上記のものよりも少し遅くなる)次のようになります。

def domainObjects = DomainClass.findAll() 
domainObjects.each { 
it.delete(flush:it==domainObjects.last, failOnError:true) 
} 
関連する問題