私はトランザクション内の複数のエンティティを削除するための雄弁な方法を探しています。ロールバックによるHQL一括処理による削除
idsのリストが与えられた場合、影響を受ける行の数がリストの数と異なる場合、例外をスローしたいと思います。現在、私は以下のスニペットを使用しますが、それは定型の多くが含まれます:
private int deleteMyEntities(final List<Integer> ids) {
final Session session = SomeHelper.getOpenSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
final int affectedCount = session.createQuery("delete MyEntity where id in (:ids)")
.setParameterList("ids", ids)
.executeUpdate();
if (affectedCount == ids.size()) {
tx.commit();
tx = null;
return affectedCount;
} else {
throw new HibernateException("Delete count does not match target count.");
}
} finally {
if (tx != null) {
tx.rollback();
}
}
}
いくつかの落とし穴:
- これは、依存性注入、注釈駆動型取引やその他の細かな点を欠いたレガシーアプリです。 「春使用」に似た答えは例外的に有用ではありません。
- Java 1.6にコンパイルします。
でフィルターにオープンし、要求(ビュー内のオープンセッション)の期間中に開催され、これセッションリセットされますか? – developer
定型文のトンがあります。 – Andreas
MyEntityオブジェクトの代わりにIDフィールドが –