【发布时间】:2019-02-26 21:10:31
【问题描述】:
我正在使用使用@Transactional 注释的事务方法。我正在尝试使用 JpaRepository 的 save() 方法将对象保存到数据库中。 (由于数据库关系的限制,这将引发错误。)
现在,当我调试程序时,我发现在事务方法结束时抛出异常,而不是在调用save 方法时。这与非事务方法的行为完全不同。
有人可以解释为什么会这样吗?为什么在事务方法结束时抛出异常,而不是实际应该发生的时候。
我的第二个问题是,当方法是事务性时,抛出的异常是DataViolationException,当它是非事务性时,抛出的异常是PSQLException(使用 Postgres 数据库)。为什么呢?
下面是代码
@Transactional
public ResponseType methodA(UserObject userObject) {
//save call
jpaRepoObject.save(userObject);
//next call will fail due to relational constraints on database
jpaRepoObject.save(userObject); //should throw PSQLException/DataViolationException
return new ResponseType("success"); //Error thrown after this line.
}
【问题讨论】:
-
因为只在事务结束时才进行保存
-
能否请您发布您的代码,以便我们修复它?
-
更相关的是,告诉我们什么异常和消息(在这种情况下不一定是堆栈跟踪)。
-
@NielsNet 如果交易包含多个保存调用怎么办。它们都将在交易结束时完成吗?如果下一次保存依赖于上一次保存和其他代码怎么办?
-
@JBDouble05 用代码更新了帖子!
标签: java spring exception-handling spring-data-jpa transactional