2014-04-02 33 views
0

我想使用DAO相同的功能,具有安全SERIALIZABLE隔離假設getBalances()春@Transactional從不同的呼叫來源不同的隔離級別

在重要的商業邏輯方法
@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()來自不同的呼叫源?

+1

該服務應該是事務性邊界,而不是您的道。將具有適當配置的'@ Transactional'移至所需的服務方法。 –

回答

2

嘗試在getBalances上使用@Transactional(propagation = Propagation.MANDATORY)並在呼叫服務上定義隔離。