【问题标题】:@Transactional and Spring Data@Transactional 和 Spring 数据
【发布时间】:2018-08-20 14:59:48
【问题描述】:

到目前为止,我的理解是,当您使用 @Transactional 注释时,任何失败都会导致操作回滚到之前的状态。我有这个方法,它使用 spring PagingAndSortingRepository 接口将项目添加到引用中。

@Override
        public Quotation createNewQuotation(PurchaseRequest purchaseRequest, Supplier supplier) {
        Quotation quotation = new Quotation();
        Date now = new Date(Calendar.getInstance().getTimeInMillis());
        quotation.setQuotationDate(now);
        quotation.setPurchaseRequest(purchaseRequest);
        quotation.setSupplier(supplier);
        quotationRepository.save(quotation);
        return quotation;

    }

当我在整个类上添加@Transactional注解并手动测试操作是否会回滚(不选择任何供应商)时,其他属性如quoteDate、PurchaseRequest仍然存储在数据库中。

我感觉我没有使用@Transactional 注释。可能是什么问题,我能做些什么来解决它?

【问题讨论】:

  • 你的问题是什么?
  • 可能是什么问题,我能做些什么来解决它?
  • 好的,您是否已配置为在您的 spring 配置中使用事务管理器?你能展示你的弹簧配置吗?
  • 我正在使用 Springboot。是否需要任何配置才能完成这项工作?我一直在使用这个spring.io/guides/gs/managing-transactions 作为参考。
  • "@Transactional 注解任何失败都会导致操作回滚到之前的状态" -- 这不是真的,只有未经检查的异常才会被默认回滚。

标签: java spring spring-boot spring-data-jpa spring-transactions


【解决方案1】:

感谢您的回复。

我通过在我的主类上添加@EnableTransactionManagement 来完成这项工作。 我解决了

无法将 bean 'purchaseRequestServiceImpl' 作为 'com.eprocurement.service.PurchaseRequestServiceImpl' 因为它是 JDK动态代理实现: com.eprocurement.service.PurchaseRequestService 行动:考虑 将 bean 作为其接口之一注入或强制使用 通过在 @EnableAsync 上设置 proxyTargetClass=true 来创建基于 CGLib 的代理 和/或@EnableCaching。

通过将@Transactional 注释放在我的服务接口和@autowiring 它而不是@autowiring 我的实现类。

【讨论】:

    猜你喜欢
    • 2017-06-11
    • 2011-05-10
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多