1

我想用唯一字段保存實體。不要檢查約束是否違反,我只想略過DataIntegrityViolationExceptionHibernate在sessionFactory.getCurrentSession()上失敗

我發現,我能做到這一點的方式如下:

@Transactional 
wrapperMethod() { 
    methodWhenInsertIsDone(); 
} 

@Transactional(propagation = Propagation.REQUIRES_NEW) 
methodWhenInsertIsDone() { 
    failingMethod(); 
} 

failingMethod(){ 
    sessionFactory.getCurrentSession().blablabla() 
} 

當我運行它,我得到以下異常:

HibernateException: Could not obtain transaction-synchronized Session 

所有這些方法都在服務層類。 @EnableTransactionManagement存在,HibernateTransactionManager被定義。一切工作正常,沒有@Transactional

請問您可以告訴我這裏有什麼問題或/並且可能會建議另一種方法來吞下DataIntegrityViolationException異常,而不使用try/catch塊。

感謝您提前提出每個想法!

UPDATE:我正在將methodWhenInsertIsDone移動到另一個類中,因爲現在它不是從代理對象調用的。

UPDATE:例外消失,但Propagation.REQUIRES_NEW沒有幫助。所以現在我需要尋找其他解決方案燕子DataIntegrityViolationException。如果您有任何請讓我知道。我可以爲它創建一個新問題。

+0

包含您的配置。同樣,如果所有這些類都在一個類中,那麼對'methodWhenInsertIsDone'的調用將不會導致新的事務。 –

+0

@M。 Deinum謝謝,我也剛剛發現它。我會更新這個問題。我想我將不得不將'methodWhenInsertIsDone'方法移到另一個類。 –

回答

0

我已經將另一個類中的methodWhenInsertIsDone移動了,因爲它不是從代理對象中調用的。異常消失了。

Propagation.REQUIRES_NEW沒有幫助。所以現在我需要尋找其他的解決方案吞下DataIntegrityViolationException。如果您有任何請讓我知道。我可以爲它創建一個新問題。

相關問題