Spring 启动@Transactionnal 嵌套不好的做法?

Spring boot @Transactionnal imbrication bad practice?

我正在开发一个带有 Spring 引导的 JEE 应用程序。 我只是想确定将注释为 @Transactionnal 的函数重叠起来会有任何问题吗?这是一种不好的做法?

在我的示例中,我想保存两个用户之间的关系,如果我调用最后一个函数,它将叠加三个事务。

@Transactional
public PrRelationship save(Relationship r)
{
    Relationship result = this.relationshipRepo.save(r);

    return result;
}

@Transactional
public Relationship save(Relationship r, User relation)
{
    this.userService.save(relation);

    r.setUser(user);
    r.setUserRelation(relation);
    return this.save(r);
}

@Transactional
public Relationship save(Relationship r, User user, User relation) {
    this.userService.save(user);
    return this.save(r, relation);
}

谢谢您的指点:)

您应该阅读 Spring 中的 Transaction Propagation and Transaction Management。它将回答这些类型的问题。

为了回答您的问题,默认传播是 REQUIRED,这意味着从创建事务的方法对事务方法的任何调用都将在同一事务上执行。所以在你的情况下,他们会 "imbricate" (我不得不查找那个词)。