【问题标题】:Spring - JPA - TransactionsSpring - JPA - 事务
【发布时间】:2018-03-10 01:00:14
【问题描述】:

我的业务层中有一个用@Transaction 注释的方法。它插入到两个不同的实体中。

@Transaction
void method (){
try{
  service1.insertOne();
  service2.insertTwo();
}
catch(Exception ex) {
// log exception
}
}

当验证失败时,这两种方法都会抛出一个自定义异常。

我面临的问题是如果 insertOne 成功并且 insertTwo 抛出验证异常,则事务不会回滚。即正在插入 insertOne 中的数据。

【问题讨论】:

  • 您是否配置了 XA 数据源?您是否在类路径上有实际的事务管理器实现,例如 bitronix?除非您配置了数据源或消息总线,否则事务将无法工作...
  • 我使用默认的spring boot jpa配置和hibernate。
  • 它将两次写入视为单独的事务,除非您配置为全局 XA 事务,这意味着使用 Bitronix 或类似的。默认的 JPA TM 仅支持单个非全局事务。

标签: spring-data-jpa transactional


【解决方案1】:

出现这种情况只是因为您在方法中捕获了通用异常, 所以“事务方面”对您的验证错误一无所知。 在这种情况下,如果没有抛出异常,则事务提交成功

【讨论】:

    猜你喜欢
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 2015-12-17
    • 2011-08-06
    • 2013-05-08
    • 2017-02-11
    • 2020-09-06
    相关资源
    最近更新 更多