古いデータベースがあり、Grails を使用しています。間違い#1。
複合キーを使用します。間違い#2。
これらのドメイン クラスが与えられた場合:
Movie {
static hasMany = [ roles: Role ]
}
Person {
static hasMany = [ roles: Role ]
}
Role {
Movie movie
Person person
String foo
}
次のように、ある人から別の人に役割を移動したい:
Role x = person1.roles[0]
x.person = person2
save(flush:true)
しかし、何も起こりません。まったく。log4j で休止状態のトレースおよびデバッグ レベルのログを有効にしましたが、更新ステートメントが表示されません。しかし、私がこれを行うと:
Role x = person1.roles[0]
x.person = person2
x.foo = "i can haz update?"
save(flush:true)
foo の更新は行われますが、次のように、person を指す外部キーは変更されません。
DEBUG hibernate.SQL - update ct_roles set foo=? where movie_id=? and person_id=?
TRACE sql.BasicBinder - binding parameter [1] as 'i can haz update?'
TRACE sql.BasicBinder - binding parameter [2] as [BIGINT] - 999
TRACE sql.BasicBinder - binding parameter [3] as [BIGINT] - 2
person_id 2 はまだ役割を持たない person2 に属しているため、更新は失敗することに注意してください。
では、単に古い役割を削除して、目的の人に関連付けられた新しい役割を作成する以外に、これを解決する方法はありますか?