spring-data-jpa 为什么我们需要在SpringDataJPA中使用@Transactional来注解服务类

xjreopfe  于 2022-11-10  发布在  Spring
关注(0)|答案(2)|浏览(148)

在一个spring Boot 应用程序中,我们有一个扩展JpaRepository的用户定义的存储库接口。
1.@事务性
1.@存储库
因此,我们可以在扩展JpaRepository的用户定义的存储库接口上跳过这两个注解。那么,为什么我们需要在服务类上显式添加@Transactional,而服务类也只使用我们的用户定义的存储库对象?

jmo0nnb3

jmo0nnb31#

使用Transactional注解的目的是为了使被注解方法中的所有内容都发生在同一个工作单元中,并且要么所有内容都成功,要么所有内容都失败。将Transactional仅放置在每个仓库上意味着每个仓库都可以有自己的事务,并且第二个失败的事务不会回滚第一个。
您可以在一个服务上使用非事务性方法,或者在每个方法上都使用非事务性方法,因此将一个类标注为Service并不意味着Spring可以假设所有的东西都是事务性的。

ckx4rj1h

ckx4rj1h2#

这是一个有与无的问题。
对象可以是Transactional,或具有成员对象Transactional
如果对象有Transactional的成员对象,它本身不会自动成为Transactional
对象A包含Transactional的对象B,这不会使对象A成为Transactional

相关问题