Я портирую приложение Grails из Oracle в базу данных MySQL. Первоначальная версия Oracle является устаревшей базой данных, которая использует несколько сложных представлений, использующих функцию Oracle INSTEAD OF INSERT OR UPDATE, которой нет в MySQL. В качестве обходного пути я реализовал методы Insert и Update в классах Domain, которые указывают на эти виды представлений. Например,
class AdminUser {
//...
def update() {
if(this.validate()) {
Sql sql = Utils.getHibernateSql()
sql.execute(
"update table_x ...",
[...]
)
sql.execute(
"update table_y ...)",
[...]
)
sql.execute(
"update table_z ...",
[...]
)
return true
}
return false
}
//...
}
Вот описание проблемы, с которой я сталкиваюсь в данный момент:
- В сервисном методе я загружаю экземпляр AdminUser, используя AdminUser.get
- Я изменяю загруженный экземпляр и вызываю update (), все выглядит хорошо
- Как только сервисный метод завершает выполнение, возникает исключение из-за чего-то, вызывающего save в экземпляре.
Как я могу предотвратить магическое сохранение, происходящее на шаге (3) (я недавно где-то читал, что Grails автоматически сохранит измененный экземпляр класса Domain, который еще не был сохранен при выходе из метода обслуживания, но я не могу показаться чтобы найти ссылку на этот ресурс прямо сейчас)?