Spring Boot中的@Transactional

Abd*_*SSI 5 hibernate jpa transactions spring-data-jpa spring-boot

此链接: https: //www.quora.com/When-should-Spring-Boot-methods-use-the-Transactional-annotation

解释清楚@Transactional是做什么的,但我还是不明白Spring Boot方法什么时候应该使用这个注解:

例如:

我有这个方法:

void addPerson () {// code that calls the DAO layer}
Run Code Online (Sandbox Code Playgroud)

我的方法在没有@Transactional注释的情况下也能正常工作,那么为什么我应该添加这个注释。

更准确地说(在 Spring Boot 中)有什么区别:

@Transactional void addPerson () {// code that calls the DAO layer}
Run Code Online (Sandbox Code Playgroud)

void addPerson () {// code that calls the DAO layer}
Run Code Online (Sandbox Code Playgroud)

或者Spring boot会自动添加这个注释,这样我们就不需要将它添加到我们的服务中

Fer*_*ado 11

@Transcational当 API 上的并发调用可能相互影响时使用。

假设您要添加一个(您从某处检索数据,从数据创建一个新人并将其添加到人员列表中)。假设为了创建一个 Person,您需要一个partner属性,该属性是另一个 Person。

在创建人员之前,您可以通过 Id somehwere 搜索合作伙伴并将其添加到新的人员partner属性中。但是,如果在所有这些查询期间partner您想要添加的内容在某处被删除(假设由于其他一些查询而在数据库中),该怎么办?您最终将得不到您所请求的对象。

如果您使用@TransactionalSpring,请确保所有必需的数据在事务结束之前都是安全的。一旦结束,partner就会发生来自 的删除请求,然后您将有一些逻辑将其从新的Person对象中删除。但这是之后才会发生的事情。

您用于@Transactional确保“交易”的安全。