1

ユニークなフィールドを持つエンティティを保存します。制約が違反されていないかどうかを調べる代わりに、何とか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。あなたが持っているなら私に知らせてください。私はそれについて新しい質問を作成することができます。

+0

設定を含めます。また、それらのクラスがすべて1つのクラスにある場合、 'methodWhenInsertIsDone'の呼び出しによって新しいトランザクションが発生することはありません。 –

+0

@M。 Deinumありがとう、私はちょうどそれを見つけた。私は質問を更新します。 'methodWhenInsertIsDone'メソッドを別のクラスに移動しなければならないと思います。 –

答えて

0

私は、別のクラスのメソッドWhenInsertIsDoneを、プロキシオブジェクトから呼び出されたものとして移動しました。例外はなくなりました。

Propagation.REQUIRES_NEWは役に立ちません。だから今私はDataIntegrityViolationExceptionを飲み込むための他の解決策を探す必要があります。あなたが持っているなら私に知らせてください。私はそれについて新しい質問を作成することができます。

関連する問題