2016-01-05 31 views
1

我正在使用Grails 2.1.1。在控制器我有頂部我已經使用org.springframework.transaction.annotation.Transactional如下的方法:@Transactional在Grails方法上給出錯誤

@Transactional 
def saveItem() { 
    ... 
} 

然後,它是給這個錯誤在控制檯:java.lang.reflect.InvocationTargetException和示出了在瀏覽器的形式,而不是僅元素一些代碼。但是如果我從該方法的頂部刪除@Transactional,則視圖呈現正常。

我在這裏錯過了什麼?

+0

正如我所記得的,控制器中的所有操作默認都是事務性的。 – Koloritnij

+0

@Koloritnij - 我不認爲控制器是交易型的,服務在哪裏。 – tylerwal

+0

我知道。我曾與grails 2.4.2。那裏保存和更新是事務性的。 –

回答

0

支持@Transactional註解是在Grails 2.3.x中引入的,因此它不適用於您的情況,而您的Grails版本較舊。

作爲一種解決方法,您可以將所有控制器業務邏輯代碼移動到Grails服務(默認情況下爲事務性)或將您的控制器代碼包裝在withTransaction方法中。

@Transactional 
def saveItem() { 
    AnyDomain.withTransaction { 
     ... 
    } 
} 
+1

「對@Transactional註解的支持在Grails 2.3.x中引入」 - 我認爲最初的問題與'org.springframework.transaction.annotation.Transactional'有關,而不是'grails.transaction.Transactional'。 –

+0

但我需要在此方法中更新3域。否則的影響。如何用withTransaction做到這一點? –