web-dev-qa-db-ja.com

休止状態にしてすべて削除

Hibernateのテーブルのすべての行を削除するに最適な方法は何ですか?

コレクションを反復処理してsession.delete()を呼び出すと、私の知る限りでは実行されません。

別のオプションsession.createQuery("delete ...")を使用しても、永続コンテキストには影響しません。

より良いバリアントがない場合、これらのメソッドを使用する必要がありますか?

33
feiroox
  • カスケードするものがない場合は、HQL delete DELETE FROM enityName
  • カスケードがある場合は、コレクションを反復処理し、各コレクションを個別に削除します。

問題は、休止状態をデータベースに任せるのではなく、休止状態を内部的に処理することにあります。したがって、クエリを送信しても内部カスケードはトリガーされないため、不整合/孤立が発生します。

パフォーマンスが非常に重要な場合(毎日ではないため、テーブルが切り捨てられる場合)、各カスケードに対して複数のHQL削除を行うことができます(つまり、カスケードを手動で処理します)。

24
Bozho

テーブルの切り捨てにHQLを使用できます

public int hqlTruncate(String myTable){
    String hql = String.format("delete from %s",myTable);
    Query query = session.createQuery(hql)
    return query.executeUpdate();
}
String stringQuery = "DELETE FROM tablename";
Query query = session.createQuery(stringQuery);
query.executeUpdate();
6
thelost