我想在DAO中使用相同的功能,假设getBalances()
具有安全的SERIALIZABLE
隔离:
@Transactional(isolation=Isolation.SERIALIZABLE)
public List<Balance> getBalances() { ... }
在重要的业务逻辑方法中:
public doVeryImportantFinancialChanges() {
.. complicated logic with multiple getEntries() calls, multiple SELECT/UPDATE...
}
但我也想拥有每隔1-2秒调用一次带有
SELECT
的余额以及可接受的损坏完整性以及所有那些不可重复的,幻像等数据的不安全的“寿命视图”。问题是我的“生命视图”计划的
SELECT
请求者使用了getBalances()
高度隔离的函数,并获得:org.springframework.dao.DeadlockLoserDataAccessException: PreparedStatementCallback; SQL [SELECT * FROM ....]; Deadlock found when trying to get lock; try restarting transaction;
如何实现从不同的调用源对同一方法getBalances()的双重访问(安全可序列化和不安全)?
最佳答案
尝试在@Transactional(propagation = Propagation.MANDATORY)
上使用getBalances
并在调用服务上定义隔离。