grails - Grails:如何为集合检索持久值?

标签 grails collections persistence beforeupdate

我正在编写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
}

并且 Controller 具有以下 Action :
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()之前应用的,因此该集合不会被识别为脏字段。

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

最佳答案

我有一个类似的问题,当我在域类上使用 .get()时,在不期望它们的情况下进行更新。我现在喜欢使用 .read(),因为它在我不期望的时候不会更新数据库。 Grails在感觉上做了很多偷偷摸摸的事情,我认为这很有帮助,但可能会造成混淆。

关于grails - Grails:如何为集合检索持久值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15766961/

相关文章:

grails - Grails:禁用外键约束

java - 将自定义设置数据结构转换为列表java

java - 为什么 Hashmap 允许空键?

apache-spark - Apache Spark 是在节点级还是集群级缓存 RDD?

java - Windows 上的 Grails 出错。无法找到有效的认证

grails - 安装grails模板不提供脚手架

grails - 无法解析类grails.doc.internal.StringEscapeCategory

java - 在集合中查找编辑

JPA:持久外键约束的问题

java - 如何告诉 JPA 使用简单类的字段作为持久值?