我有一个带有RequestMapping myMethod的Spring RestController MyRestController和自动装入的Spring Data Repository myRepository。在myMethod中我调用myRepository:myRepository.save(myEntity)和myRepository.findByMyProperty(...)。什么时候开始交易? (在myMethod调用之前或在每个myRepository方法调用之前有几个)?
我对这个问题非常困惑。请有人帮我说清楚。
答案 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。