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

时间:2018-01-17 09:16:33

标签: java spring hibernate transactions transactional

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

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

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

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

}

想象一下,subBusinessMethod调用DAO层来执行一些数据库事务。调用subBusinessMethod后的代码执行(可能是更多的数据库调用)取决于subBusinessMethod中发生的数据库事务的结果。

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

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

1 个答案:

答案 0 :(得分:4)

没有。 @Transactional属性直接映射到数据库级别。可以并且将同时访问该方法(仅synchronized或其他锁定可以阻止该方法)。

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

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