cod*_*aig 5 java mysql spring hibernate jpa
我有一个案例,事务启动后(在代码中)调用一个方法来启动新事务。当内部事务完成时,数据将持久保存在数据库中,但数据对外部事务不可见。
这是代码片段..
@Transactional(readOnly = true)
public void doSomething() {
// Some stuff happens here
doMoreStuff();
// Some more stuff happens here.
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void doMoreStuff() {
...
}
Run Code Online (Sandbox Code Playgroud)
“doMoreStuff”方法更新数据库中的一些数据,之后“doSomething”方法需要查看更新的数据,但事实并非如此。例如,“doMoreStuff”将布尔值从 false 设置为 true 并保留它。“doSomething”方法仍然只将值视为 false。
有什么建议么?
小智 4
我不知道Hibernate中事务“嵌套”是如何完成的(因为我不相信MySQL实际上可以嵌套事务)。
因此,我假设第二个(嵌套)事务必须(?)是到数据库的新连接 - 否则不可能在不影响“外部”事务的情况下回滚“嵌套”事务。
如果情况确实如此,那么您可能会受到 MySQL 默认隔离级别的影响,该级别不会让外部事务看到该事务启动后REPEATABLE READ已提交的任何数据。
要测试这个理论,请尝试将(外部事务的)隔离级别更改为READ COMMITTED,看看是否可以解决问题。
| 归档时间: |
|
| 查看次数: |
3498 次 |
| 最近记录: |