Что ж, до Grails 3.1 сервисы были транзакционными по умолчанию, а с Grails 3.1 они транзакционные, только если применяется аннотация @Transactional
.
Если вы находитесь в транзакционной службе, когда срабатывает исключениетранзакция будет помечена для отката.В то же время при откате транзакции сеанс Hibernate, используемый GORM, очищается.
Я предполагаю, что ваш сервис помечен @Transactional
.Вот почему ваш домен не сохраняется.Чтобы обойти описанное выше поведение, вы можете пометить свой сервис как @NotTransactional
.Это даст вам больше контроля над вашим методом обслуживания, просто знайте, что он больше не будет транзакционным.И сеанс GORM не будет очищен после создания исключения.
РЕДАКТИРОВАТЬ: Поскольку вы звоните .save()
, настоятельно рекомендуется сделать это внутри транзакции.Затем вы можете использовать метод withTransaction(Closure)
.