Spring Boot + Hibernate を使用して、nameQuery または nativeQuery を使用してデータを一括削除しようとしています。いくつかの要素には制約違反があり、Spring/Hibernate はロールバック全体を生成します。
ロールバックを回避することは可能ですか? つまり、削除するレコードは 100 個で、3 個には制約があるため、Hibernate は 100 個のロールバックを生成しますが、ロールバックする必要があるのは 3 個だけで、97 個の要素を削除したいと考えています。今、私は悪い解決策を作成しました.forループを使用して100個のSQLクエリを実行しました。
サービス層:
@Transactional(noRollbackFor = {
SQLIntegrityConstraintViolationException.class,
PersistenceException.class,
ConstraintViolationException.class,
DataIntegrityViolationException.class })
public int deleteAll(String ids[]) {
call.dao.delete(ids)
}
休止状態レイヤー:
delete(String ids[]) {
sql = "DELETE from mae1000 as x WHERE x.idccty in (:ids)";
int r = getCurrentSession().createNativeQuery(sql).setParameter("ids", Arrays.asList(ids)).executeUpdate();
}