我正在将 Grails 应用程序从 Oracle 移植到 MySQL 数据库。最初的 Oracle 版本是一个遗留数据库,它使用一些复杂的视图来利用 MySQL 所没有的 Oracle 的 INSTEAD OF INSERT OR UPDATE 特性。作为一种解决方法,我在指向这些视图的域类上实现了插入和更新方法。例如,
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.get 加载 AdminUser 的实例
- 我修改加载的实例并调用update(),一切正常
- 一旦服务方法完成执行,由于在实例上调用 save 的东西而引发异常。
如何防止在步骤 (3) 中发生神奇的保存(我最近在某处读到 Grails 会自动保存已修改的 Domain 类实例,该实例在退出服务方法时尚未保存,但我似乎找不到现在链接到该资源)?