Grails アプリケーションを Oracle から MySQL データベースに移植しています。元の Oracle バージョンは、MySQL にはない Oracle の INSTEAD OF INSERT OR UPDATE 機能を利用するいくつかの複雑なビューを使用するレガシー データベースです。回避策として、これらの種類のビューを指す Domain クラスに Insert メソッドと 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 が変更されたドメイン クラス インスタンスをサービス メソッドの終了時にまだ保存されていないものとして自動的に保存するという記事を読みましたが、今すぐそのリソースにリンクしてください)?