我想用唯一字段保存实体。我没有检查是否违反了约束,而是想以某种方式跳过DataIntegrityViolationException
。
我发现我可以通过以下方式完成:
@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
,因为现在它不是从代理对象调用的。
更新:异常消失但Propagation.REQUIRES_NEW
无效。所以现在我需要寻找吞下DataIntegrityViolationException
的其他解决方案。如果您有任何请告诉我。我可以为它创建一个新问题。
答案 0 :(得分:0)
我已将methodInhenIsDone中的方法移动到另一个类中,因为它不是从代理对象调用的。例外消失了。
然而Propagation.REQUIRES_NEW
没有帮助。所以现在我需要寻找吞下DataIntegrityViolationException
的另一个解决方案。如果您有任何请告诉我。我可以为它创建一个新问题。