spring-boot - Spring Data JPA中为什么需要给Service类加上@Transactional注解

标签 spring-boot hibernate spring-data-jpa transactions spring-transactions

在 Spring Boot 应用程序中,我们有扩展 JpaRepository 的用户定义存储库接口(interface)。 JpaRepository 又具有一个实现类 SimpleJpaRepository。 SimpleJPARepository 有 2 个注释

  1. @事务性
  2. @存储库

因此,我们可以在扩展 JpaRepository 的用户定义存储库接口(interface)上跳过这 2 个注释。 那么为什么我们需要在也仅使用用户定义的存储库对象的服务类上显式添加@Transactional?

最佳答案

使用事务注释的目的是,注释方法中的所有内容都发生在同一工作单元中,并且要么一切成功,要么一切失败。仅在每个存储库上放置事务意味着每个存储库可以有自己的事务,并且第二个存储库失败不会回滚第一个存储库。

您可以在服务上使用非事务性方法,或者每个方法,因此将类注释为服务并不意味着 spring 可以假设一切都是事务性的。

关于spring-boot - Spring Data JPA中为什么需要给Service类加上@Transactional注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71699183/

相关文章:

spring - 使用 Eureka/Feign 时 @DataJpaTest 失败

java - 如何解决此错误 : Caused by: java. lang.InknownClassChangeError: null

spring - 基于 spring-boot 项目构建可部署的 WAR

java - Spring Boot 2 @OrderBy 被忽略

java - 如何在Spring Controller 类中使用路径变量?

java - Spring Boot REST 资源不显示链接对象(集)

java - 使用 Hibernate 将 json 值插入到 postgresql 表中

java - 使用 Hibernate 从 SQL 查询创建表

java - 使用 JPA 查询注释更新查询至 Oracle 11g 挂起

java - 如何在 Jpa 实体中使用 Java 继承