【问题标题】:Spring REST Controller transactionsSpring REST 控制器事务
【发布时间】:2015-05-04 16:51:14
【问题描述】:

我有一个 Spring RestController MyRestController,其中包含 RequestMapping myMethod 和自动装配的 Spring Data Repository myRepository。在 myMethod 中,我调用 myRepository:myRepository.save(myEntity) 和 myRepository.findByMyProperty(...)。什么时候开始交易? (在 myMethod 调用之前一个还是在每个 myRepository 方法调用之前几个)?

我对这个问题感到非常困惑。谁能帮我说清楚,拜托。

【问题讨论】:

    标签: spring transactions spring-data


    【解决方案1】:

    According to the spring-data documentation:

    默认情况下,存储库实例上的 CRUD 方法是事务性的。

    因此,只要您使用CrudRepository 的子类,您的save() 方法就是事务性的。

    您的查询方法默认情况下不是事务性的,文档说:

    要让您的查询方法具有事务性,只需在您定义的存储库接口处使用@Transactional

    所以你应该注释你的存储库:

    @Transactional(readOnly = true)
    public interface MyRepository extends JpaRepository<My, Long> {
      List<User> findByMyProperty(String myProperty);
    }
    

    【讨论】:

      【解决方案2】:

      默认情况下,事务在每个 myRepository 方法调用之前开始,要完全控制事务,请在调用存储库方法的每个服务方法上使用 @Transactional。

      【讨论】:

        猜你喜欢
        • 2013-09-09
        • 1970-01-01
        • 2018-07-30
        • 2019-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-18
        • 1970-01-01
        相关资源
        最近更新 更多