2014-10-06 69 views
1

我有一個方法說LogErrorA與Spring.Net的[Transaction]屬性,我想調用另一個方法(比如說LogErrorB),它也有[Transaction]屬性,因爲我有時需要直接調用它。 LogErrorA調用將在Spring.NET的一個事務中工作,或者多個事務將被創建?如果方法A調用方法B並且都具有[Transaction]屬性,會發生什麼情況?

[Transaction] 
public virtual void LogErrorA() 

[Transaction] 
public virtual void LogErrorB() 

而LogErrorA在LogErrorB內調用。

此外,LogErrorB可以直接調用一些時間。

回答

2

有一些事務的預定義傳播方法,如:Propagation.REQUIRED,Propagation.NEW,Propagation.NESTED等等。但是如果你沒有定義任何傳播方法,這意味着它默認需要Propagation.REQUIRED

Propagation.REQUIRED表示:如果任何事務未運行,則它將創建新事務,並且如果在該特定點存在任何事務,則它將使用該現有事務。

因此,在您的情況下,您將從LogErrorA()調用LogErrorB(),在這種情況下,它不會創建新的事務,但它將使用在LogErrorA()方法中創建的相同事務。

如果您仍然有任何疑問,請讓我知道。

謝謝,

+0

您的回答給了我很好的信息。所以,我將使用「[Transaction(TransactionPropagation.Required)]」。但我認爲這是默認的,所以我不必做任何事情。我應該保留屬性。對? – 2014-10-06 10:02:34

+0

看來這是根據此頁面的默認值:http://www.springframework.net/doc-1.1-P3/reference/html/transaction.html。請讓我知道如果我忘記了什麼.. – 2014-10-06 10:06:19

+1

是的,'Propagation.Required'是默認的屬性值,所以你可以留下屬性,它會認爲它是Transaction.Required。有關交易的更多信息,請參閱此文檔: http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html – 2014-10-06 10:06:28

相關問題