2012-08-16 58 views
0

如果具有某些事務屬性的事務方法在具有不同事務屬性的同一個bean上調用方法,會發生什麼情況?用不同的事務屬性調用Spring Bean的方法?

+1

@Transactional的屬性是不同的,在你的情況? – Vikdor 2012-08-16 01:57:20

+0

你能解釋你想達到的情景嗎? – 2012-08-16 05:33:32

+0

相關:[與春季交易管理問題?](http://stackoverflow.com/questions/11950895) – 2012-08-16 07:11:38

回答

1

隨着春天nothin的標準事務配置會發生。從技術文檔(看看reference documentation聲明式事務管理的完整說明):

在代理模式(這是默認值),只有外部方法調用 進來通過代理被截獲。這意味着,即使被調用的方法標記爲 @Transactional,實際上,在目標對象中調用目標對象的另一種方法的自我調用在運行時也不會導致實際的 事務 。

如果您需要更改事務性行爲使用方法調用在同一豆你可以改變交易模式,AspectJ和使用編譯時間wieving(look here如何做到這一點)(傳播,只讀狀態等) 。但我從來沒有在實踐中這樣做過,只是爲了測試。通常它是足夠的默認事務設置。

0

@事務的readOnly的屬性有例外如下:

@Transactional(readOnly=true) 
void methodA(){} 

@Transactional 
void methodB(){} 

如果你這樣調用的方法,並使用Hibernate或其他ORM平臺:

methodA(); 
methodB(); 

將拋出只讀連接異常。

+0

對不起,但你想說什麼呢? – dimas 2012-08-16 06:52:20

+0

@Transactional(readOnly = true)將打開一個只讀連接,Spring不允許您通過SQL更新表,並表示連接是隻讀的。 – JackingLiu 2012-08-16 07:00:38

+0

是的,但如果在methodA(..)中只能從數據庫中讀取一些數據而不修改它,那麼它就會正常工作。 – dimas 2012-08-16 07:03:16

相關問題