我想在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并在调用服务上定义隔离。

10-05 23:39