2016-01-05 1 views
1

Я использую Grails 2.1.1. В контроллере у меня есть метод сверху я использовал org.springframework.transaction.annotation.Transactional следующим образом:@Transactional дает ошибку на методе Grails

@Transactional 
def saveItem() { 
    ... 
} 

Затем он дает эту ошибку в консоли: java.lang.reflect.InvocationTargetException и показывать только некоторый код в браузере вместо элемента формы. Но если я удалю @Transactional сверху, то метод рендеринга отлично.

Что мне здесь не хватает?

+0

Как я помню, все действия в контроллере являются транзакционными по умолчанию. – Koloritnij

+0

@ Колоритный - Я не считаю, что контроллеры являются транзакционными, где в качестве сервисов. – 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 домена в этом методе. в противном случае - роль. Как это сделать с помощью трансляции? !! –