在 Spring Boot 应用程序中,我们有扩展 JpaRepository 的用户定义存储库接口(interface)。 JpaRepository 又具有一个实现类 SimpleJpaRepository。 SimpleJPARepository 有 2 个注释
- @事务性
- @存储库
因此,我们可以在扩展 JpaRepository 的用户定义存储库接口(interface)上跳过这 2 个注释。 那么为什么我们需要在也仅使用用户定义的存储库对象的服务类上显式添加@Transactional?
最佳答案
使用事务注释的目的是,注释方法中的所有内容都发生在同一工作单元中,并且要么一切成功,要么一切失败。仅在每个存储库上放置事务意味着每个存储库可以有自己的事务,并且第二个存储库失败不会回滚第一个存储库。
您可以在服务上使用非事务性方法,或者每个方法,因此将类注释为服务并不意味着 spring 可以假设一切都是事务性的。
关于spring-boot - Spring Data JPA中为什么需要给Service类加上@Transactional注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71699183/