2

我正在编写一个 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()调用之前应用了更改,因此集合不会被识别为脏字段。

有谁知道如何改变这个?我正在编写一个功能来跟踪许多不同对象的更改历史记录,因此我需要访问以前的值以了解其值是否已更改。

4

1 回答 1

0

我有一个类似的问题,当我在域类上使用.get()时,我没想到它们正在更新。我现在喜欢使用.read()因为当我不希望它更新数据库时它不会更新。Grails 在感觉背后做了很多偷偷摸摸的事情,我认为这很有帮助,但可能有点令人困惑。

于 2013-04-02T15:05:38.327 回答