2011-10-25 15 views
3

我需要在標記爲@Transactional的類的方法中手動維護事務。如果我現在嘗試這樣做,就會拋出一個異常(很可能是因爲事務被提交了兩次,一次由我提交,兩次由包裝代理提交)。我需要做什麼。是否有可能將整個@Transactional類的一個方法標記爲非事務性

如果這是不可能的,那麼是否有辦法在事務成功提交時(數據庫中的數據和所有內容)得到通知,以便我調用另一個依賴於相同數據庫的應用程序?

回答

0

不,我不相信這是可能的。我相信如果你創建另一個線程並執行代碼,它將會在事務之外。要小心,因爲當你創建額外的線程並自己管理它時,它可能會變得很冒險。

1

我希望你使用spring。如果是,那麼你可以。

從API here中讀取此代碼塊。在部分 10.5.6使用@Transactional

@Transactional(readOnly = true) 
public class DefaultFooService implements FooService { 

public Foo getFoo(String fooName) { 
// do something 
} 

// these settings have precedence for this method 
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW) 
public void updateFoo(Foo foo) { 
// do something 
} 
} 
+0

在標有傳播= Propagation.REQUIRES_NEW的方法中,我是允許開始/手動提交交易?我試過了,但我仍然得到相同的異常 – user802232

+0

不要添加任何代碼來開始,提交或回滾你的自我,春天會爲你做。在上例中,在最後一行提交的updateFoo()方法開始時將開始一個新事務。如果在交易之間有任何問題將被回滾。 – ManuPK

相關問題