@Transactional 注解是否避免并发访问业务层方法

vig*_*age 5 java spring hibernate transactions transactional

我对@Transactional 注释在业务/服务层的使用有点不清楚。

我的问题是,当在业务层中与ISOLATION_SERIALIZABLE一起使用时,@Transactional注解是否保证不允许对特定方法进行并发访问?

@Transactional(isolation = Isolation.SERIALIZABLE)
public void businessMethod() {

    // calls subBusinessMethod
    subBusinessMethod();
    ---------------
    ---------------
    ---------------

}
Run Code Online (Sandbox Code Playgroud)

想象一下subBusinessMethod调用 DAO 层来做一些数据库事务。调用之后的代码执行(可能会有更多的 db 调用)subBusinessMethod取决于subBusinessMethod.

我需要确保对 的后续调用businessMethod不应该调用 dao 层从/向数据库读/写,而不知道先前调用的 db 表发生了什么。已在业务逻辑中添加了必需的验证。

首先,我的方法有效吗?如果是这样,我是否以正确的方式使用它。?

Kay*_*man 5

否。@Transactional属性直接映射到数据库级别。该方法可以并且将被并发访问(只有synchronized或其他锁定可以防止这种情况)。

另一方面,底层数据库事务将以可序列化隔离执行,即事务的最终结果必须好像每个事务都在一个接一个地运行(即使它们不是真正一个接一个地运行)。

根据您的要求,这似乎是一种可行的方法。但它可能不是唯一的,甚至不是最好的。