我想用唯一字段保存實體。不要檢查約束是否違反,我只想略過DataIntegrityViolationException
。Hibernate在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
。如果您有任何請讓我知道。我可以爲它創建一個新問題。
包含您的配置。同樣,如果所有這些類都在一個類中,那麼對'methodWhenInsertIsDone'的調用將不會導致新的事務。 –
@M。 Deinum謝謝,我也剛剛發現它。我會更新這個問題。我想我將不得不將'methodWhenInsertIsDone'方法移到另一個類。 –