Hibernate在sessionFactory.getCurrentSession()

时间:2017-03-14 12:42:23

标签: java spring hibernate exception-handling spring-transactions

我想用唯一字段保存实体。我没有检查是否违反了约束,而是想以某种方式跳过DataIntegrityViolationException

我发现我可以通过以下方式完成:

@Transactional
wrapperMethod() {
    methodWhenInsertIsDone();
}

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

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

当我运行它时,我得到以下异常:

HibernateException: Could not obtain transaction-synchronized Session

所有这些方法都在服务层类中。存在@EnableTransactionManagementHibernateTransactionManager已定义。没有@Transactional,一切正常。

你能不能告诉我这里有什么不对或/并且可能建议另一种方法来吞下DataIntegrityViolationException异常而不用try / catch块。

提前感谢您的每一个想法!

UPDATE :我正在移动另一个类中的methodWhenInsertIsDone,因为现在它不是从代理对象调用的。

更新:异常消失但Propagation.REQUIRES_NEW无效。所以现在我需要寻找吞下DataIntegrityViolationException的其他解决方案。如果您有任何请告诉我。我可以为它创建一个新问题。

1 个答案:

答案 0 :(得分:0)

我已将methodInhenIsDone中的方法移动到另一个类中,因为它不是从代理对象调用的。例外消失了。

然而Propagation.REQUIRES_NEW没有帮助。所以现在我需要寻找吞下DataIntegrityViolationException的另一个解决方案。如果您有任何请告诉我。我可以为它创建一个新问题。