【问题标题】:Is isDirty() method not supported in grails mongodbgrails mongodb不支持isDirty()方法吗
【发布时间】:2014-07-14 04:43:29
【问题描述】:

grails mongodb 插件不支持isDirty() 方法吗?我在this 链接中看到了一条评论,但它是在 2 年前评论的。只是想知道,如果当前版本支持它?

使用 grails 2.3.5 和 mongodb 3.0.1 并且没有安装 hibernate。

【问题讨论】:

  • 是的,其实我后来试过了。但它的行为有点不同。如果我分配一个与其当前值相同的属性值,它将返回 true。脏检测也不适用于嵌入式数据。
  • Shashank,看来 mongodb 3.0.1 正在为您工作。如果您也遇到我的问题,请查看我的问题stackoverflow.com/questions/29278975/…。谢谢

标签: mongodb grails grails-2.3


【解决方案1】:

好的,让它工作。它有效,但具有不同的行为。如果绑定了现有属性并且绑定后值没有任何变化,则isDirty() 返回 true。但如果属性根本没有绑定,那么 isDirty() 可以正常工作。

【讨论】:

    【解决方案2】:

    为什么不写User.collection?.findOne(this.id)?.password != password 之类的东西。它检测password 字段是否已更改。

    【讨论】:

    • 感谢 Alexander 的回复,但遵循您的代码将对数据库进行另一次查询。另外,由于我想在数据库事件中使用 isDirty() 方法,它可能会因锁定异常而失败。
    • @ShashankAgrawal 啊哈。那么你到底做了什么让isDirty() 工作呢?
    • isDirty() 方法有效,但方式有点不同,就像我在上面的答案中提到的那样,这并不能完全解决我的问题。因此,我深入研究了 grails 数据核心和 mongodb 的 grails 数据映射代码,发现在更新前事件中名为$changedProperties的域实例中有一个可用的属性。我用它来比较值并了解特定字段是否有更新的值。
    • @ShashankAgrawal 那么为什么不在这里发布答案呢?
    猜你喜欢
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多