【问题标题】:How to use @Transactional annotation in Spring boot如何在 Spring Boot 中使用 @Transactional 注解
【发布时间】:2019-09-20 14:57:56
【问题描述】:

我正在做一个 spring-boot 项目。

在我的项目中使用@Transactional注解之前,我有两个问题

  1. 在spring-boot、服务层或DAO层使用@Transactional注解的最佳实践?

  2. 如果是服务层,那么我应该在哪里使用 @Transactional 注释在一个类或该类中的方法上?

【问题讨论】:

标签: java database spring-boot annotations transactional


【解决方案1】:
  1. 在服务层:你希望你的整个业务方法都是 ACID
  2. 如果您希望所有 bean 方法都是事务性的,则在类上;如果您希望特定方法是事务性的,或者具有不同的事务性属性,则在方法上

【讨论】:

    【解决方案2】:
    1. Service layer 中使用@Transactional,因为DAO 层不应包含业务逻辑

    Service 层可能调用不同的 DAO 来执行 DB 操作。让我们假设一个服务方法中有 3 个 DAO 操作的情况。如果您的第一个 DAO 操作失败,其他两个可能仍会通过,您最终会出现不一致的数据库状态。注释服务层可以帮助您避免这种情况。

    1. 在方法级别使用它,因为类级别的用处不大,因为它强制所有方法(以及未来的方法/子类)都是事务性的

    在类级别,此注释默认应用于声明类及其子类的所有方法

    【讨论】:

    • @Transactional 注释适用于类级别,但它给出错误“org.hibernate.AssertionFailure: 可能对会话进行非线程安全访问”我的数据库表上应用了触发器。
    • @ShahanawajMulla 请用相关代码提出一个新问题
    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 2021-12-20
    • 1970-01-01
    • 2017-02-21
    • 2021-12-24
    • 2020-06-04
    • 2021-02-11
    • 2019-02-18
    相关资源
    最近更新 更多