Spring REST Controller事务

时间:2015-05-04 16:51:14

标签: spring transactions spring-data

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

我对这个问题非常困惑。请有人帮我说清楚。

2 个答案:

答案 0 :(得分:1)

According to the spring-data documentation:

  

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

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

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

  

要允许您的查询方法是事务性的,只需在您定义的存储库接口使用@Transactional

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

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

答案 1 :(得分:0)

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