36

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

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

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

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

4

3 に答える 3

27

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

public int hqlTruncate(String myTable){
    String hql = String.format("delete from %s",myTable);
    Query query = session.createQuery(hql)
    return query.executeUpdate();
}
于 2010-08-16T11:02:03.487 に答える
26
  • カスケードするものが何もない場合は、HQL 削除を使用しますDELETE FROM enityName
  • カスケードがある場合は、コレクションを繰り返し、それぞれを個別に削除します。

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

パフォーマンスが非常に重要な場合 (結局のところ、テーブルを切り捨てることは毎日ではありません)、カスケードごとに複数の HQL 削除を行うことができます。つまり、カスケードを手動で処理します。

于 2010-08-16T11:16:41.893 に答える
9
String stringQuery = "DELETE FROM tablename";
Query query = session.createQuery(stringQuery);
query.executeUpdate();
于 2010-08-16T11:01:18.093 に答える