簡體   English   中英

在Groovy中使用事務性注釋存在問題

[英]Trouble using the Transactional annotation in groovy

有沒有人有過不使用Groovy類入門的Spring事務(類級別,代理,注釋驅動)的經驗? 我一直在為無法解釋的LazyInitialization異常苦苦掙扎,注意到stacktrace不包含啟動事務的調用。 聽起來很瘋狂,但是我不得不懷疑Groovy是否選擇了Transactional注釋。

實際上,我找到了問題的根源。 從Spring文檔(我特別強調):

24.5.1。 AOP-建議腳本化的bean可以使用Spring AOP框架來建議腳本化的bean。 實際上,Spring AOP框架並未意識到建議使用的Bean可能是腳本Bean,因此您可能會使用或打算使用的所有AOP用例和功能都可以與腳本Bean一起使用。 在建議腳本化bean時,您僅需要了解一件事(小)……您不能使用基於類的代理,而必須使用基於接口的代理。 當然,您不僅限於為腳本bean提供建議……您還可以使用受支持的動態語言編寫方面本身,並使用此類bean來建議其他Spring bean。 不過,這確實是對動態語言支持的高級使用。

我的問題是我正在使用基於類的代理。

如果您使用的是Grails,則可以嘗試使用

MyDomainClass.withTransaction {    
  // Code within the transaction goes here
}

替代事務注釋。 如果代碼使用此方法,則可以確定問題是由注釋引起的(盡管我知道您可能不喜歡將其作為永久解決方案)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM