возможно, вы неправильно поняли цель try catch или, может быть, у вас просто шаткий момент:
@Transactional(propagation = Propagation.REQUIRES_NEW)
def test2() {
//you may be doing other stuff here
//but now about to do some transaction work
//so lets wrap this method around a try catch
try {
//this is happening
def dummy = new Dummy(name: "test2")
dummy.save()
} catch (Exception all) { // or catch (Throwable all) {
// if something went wrong in above save method
//should be caught and runtime exception means roll back
throw new RuntimeException("test2!" +all?.toString())
}
}
Я надеюсь, что это объясняет, где вы ошиблись, но на самом деле вы хотите сделать все это в сервисе и выполнить часть try catch в контроллере -
поэтому вы выполняете свою транзакционную работу, и если что-то пойдет не так, вы можете захотеть выдать дополнительные исключения из службы, которые будет захватывать try catch в контроллере, и настроить его на откат.
Я сделал пример проекта несколько лет назад, надеюсь, это поможет
в любом случае, это чьи-то эксперименты, и на самом деле это не тот способ, которым вы бы занимались правильным кодированием, я имею в виду, что это довольно странный необычный способ делать что-то, и, короче говоря, он просто пытается заставить его генерировать исключение во время выполнения, поэтому вызывает откат . Я придерживаюсь своего предложения в ответе, что вы хотите сделать разовую попытку в контроллере. Это пытается зафиксировать как ошибки проверки объекта под рукой, так и сбои в сбое любой данной транзакционной работы службы. Что-то вроде этого, но, вероятно, потребуется гораздо больше работы, чтобы зафиксировать все конкретные проблемы и вернуться на исходную страницу с основными проблемами - теперь также откатив транзакцию.
person
V H
schedule
16.02.2017