我有一个遗留数据库,我正在使用 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,目前还没有角色,因此更新失败。
那么,除了简单地删除旧角色并创建一个附加到所需人员的新角色之外,有没有办法解决这个问题?