在一个spring Boot 应用程序中,我们有一个扩展JpaRepository的用户定义的存储库接口。
1.@事务性
1.@存储库
因此,我们可以在扩展JpaRepository的用户定义的存储库接口上跳过这两个注解。那么,为什么我们需要在服务类上显式添加@Transactional,而服务类也只使用我们的用户定义的存储库对象?
在一个spring Boot 应用程序中,我们有一个扩展JpaRepository的用户定义的存储库接口。
1.@事务性
1.@存储库
因此,我们可以在扩展JpaRepository的用户定义的存储库接口上跳过这两个注解。那么,为什么我们需要在服务类上显式添加@Transactional,而服务类也只使用我们的用户定义的存储库对象?
2条答案
按热度按时间jmo0nnb31#
使用Transactional注解的目的是为了使被注解方法中的所有内容都发生在同一个工作单元中,并且要么所有内容都成功,要么所有内容都失败。将Transactional仅放置在每个仓库上意味着每个仓库都可以有自己的事务,并且第二个失败的事务不会回滚第一个。
您可以在一个服务上使用非事务性方法,或者在每个方法上都使用非事务性方法,因此将一个类标注为Service并不意味着Spring可以假设所有的东西都是事务性的。
ckx4rj1h2#
这是一个有与无的问题。
对象可以是
Transactional
,或具有成员对象Transactional
。如果对象有
Transactional
的成员对象,它本身不会自动成为Transactional
。对象A包含
Transactional
的对象B,这不会使对象A成为Transactional
。