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 表发生了什么。已在业务逻辑中添加了必需的验证。
首先,我的方法有效吗?如果是这样,我是否以正确的方式使用它。?
否。@Transactional属性直接映射到数据库级别。该方法可以并且将被并发访问(只有synchronized或其他锁定可以防止这种情况)。
另一方面,底层数据库事务将以可序列化隔离执行,即事务的最终结果必须好像每个事务都在一个接一个地运行(即使它们不是真正一个接一个地运行)。
根据您的要求,这似乎是一种可行的方法。但它可能不是唯一的,甚至不是最好的。
| 归档时间: |
|
| 查看次数: |
455 次 |
| 最近记录: |