我正在编写一个 Grails 应用程序,我需要为我的域类对象的集合检索一个持久值。让我们考虑一下我们有以下域对象:
class UserGroup {
SortedSet<User> users
static hasMany = [ users: User ]
// ...
def beforeUpdate() {
println "BEFORE UPDATE: " + this.getPersistentValue('users');
}
}
class User implements Comparable<User> {
String name
}
以及具有以下操作的控制器:
class UserGroupController {
def addUser() {
UserGroup group = UserGroup.get(params.long('gid'))
User user = User.get(params.long('uid'))
group.addToUsers(user)
group.save(failOnError:true, flush:true)
}
}
问题是当beforeUpdate()
被调用时,用户集合已经包含了最近添加的用户。所以,似乎该addTo()
方法不会触发beforeUpdate()
事件。
当我们谈论isDirty()
方法时,也会出现同样的问题。由于在beforeUpdate()
调用之前应用了更改,因此集合不会被识别为脏字段。
有谁知道如何改变这个?我正在编写一个功能来跟踪许多不同对象的更改历史记录,因此我需要访问以前的值以了解其值是否已更改。