ユニークなフィールドを持つエンティティを保存します。制約が違反されていないかどうかを調べる代わりに、何とかDataIntegrityViolationException
をスキップしたいだけです。SessionFactory.getCurrentSession()でHibernateが失敗する
私は次のようにそれを行うことができますことを発見しました:
HibernateException: Could not obtain transaction-synchronized Session
すべてのこれらのメソッドは、サービス層である:私は次の例外を取得し、それを実行すると
@Transactional
wrapperMethod() {
methodWhenInsertIsDone();
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
methodWhenInsertIsDone() {
failingMethod();
}
failingMethod(){
sessionFactory.getCurrentSession().blablabla()
}
クラス。 @EnableTransactionManagement
が存在し、HibernateTransactionManager
が定義されています。 @Transactional
せずにすべて正常に動作します。
ここで何が間違っているか教えてください。または、試しに/ catchブロックなしでDataIntegrityViolationException
例外を飲み込む別の方法を提案してください。
すべてのアイデアを事前におねがいします!
更新:methodWhenInsertIsDone
を別のクラスに移動しているので、プロキシオブジェクトから呼び出されていません。
更新:例外はなくなりましたが、Propagation.REQUIRES_NEW
は役に立ちません。だから今私は他の解決策を探す必要があるDataIntegrityViolationException
。あなたが持っているなら私に知らせてください。私はそれについて新しい質問を作成することができます。
設定を含めます。また、それらのクラスがすべて1つのクラスにある場合、 'methodWhenInsertIsDone'の呼び出しによって新しいトランザクションが発生することはありません。 –
@M。 Deinumありがとう、私はちょうどそれを見つけた。私は質問を更新します。 'methodWhenInsertIsDone'メソッドを別のクラスに移動しなければならないと思います。 –