@Transactional在春季启动

时间:2019-10-04 09:43:28

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

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

明确说明 @Transactional 的操作,但我仍然不知道Spring Boot方法何时应使用此注释:

例如:

我有这种方法:

void addPerson () {// code that calls the DAO layer}

如果没有 @Transactional 注释,那么为什么我的方法可以很好地工作,为什么我应该添加此注释。

更准确地说(在春季靴子中)之间有什么区别

@Transactional void addPerson () {// code that calls the DAO layer}

void addPerson () {// code that calls the DAO layer}

或者Spring boot会自动添加该注释,因此我们不需要将其添加到我们的服务中

2 个答案:

答案 0 :(得分:0)

在您的API上的并发调用会相互影响时,您可以使用@Transcational

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

在创建Person之前,您将通过id搜索伙伴,并将其添加到新的Person partner属性中。但是,如果在所有这些查询过​​程中要删除的partner被删除到某个地方(由于某些其他查询而在数据库中说)。您最终将没有所需的对象。

如果您使用@Transactional,Spring将确保所有必需的数据都是安全的,直到交易结束。一旦结束,就会发生从partner的删除请求,然后您将具有一些逻辑将其从新的 Person 对象中删除。但这会在之后发生。

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

答案 1 :(得分:0)

默认情况下, SpringBoot spring.jpa.open-in-view属性设置为true的值,这意味着Spring为每个请求自动进行事务。

如果将此属性设置为false,则必须用@Transactional注释要初始化它的位置[Controller | Service | DAO]。