gpt4 book ai didi

grails - 更新 Grails 中父域类中的 "lastUpdated"字段

转载 作者:行者123 更新时间:2023-12-04 01:12:55 25 4
gpt4 key购买 nike

我有一个父域类,它有一个 hasMany另一个域类。父域和子域类都有 lastUpdateddateCreated领域。我的问题是,当我更新子域类时,我需要父域类来反射(reflect)该更改并更新其 lastUpdated场也是如此。

Grails 提供的父级和子级之间是否有任何映射或其他配置可以实现此功能?

更新

我在子域类中添加了以下几行:

def beforeUpdate = {
parent.lastUpdated = new Date()
}

我还必须确保在 Controller 中,当我更新子项时,我还必须保存父项以保留新的 lastUpdated field 。这似乎工作正常,但我仍然想知道是否有映射或类似的东西可以做到这一点。

最佳答案

我有一种感觉,你建议的实现会有问题。您正在更新 parent通过设置 lastUpdated手动更新日期,这可能会导致 grails 更新 lastUpdated在对它进行脏检查之后再次。如果是这种情况,您实际上最终会得到在您最初设置的日期之后发生的 lastUpdated 时间。在您的测试中,这可能只有几(毫秒)秒,但您不能保证。

不仅如此,您的实现更难维护,因为您增加了 Parent 和 Child 的耦合。

我可以建议另一种实现吗? lastUpdated 字段应该表示特定域对象的更新时间。您要查找的日期并不完全相同,因此我不会尝试以“错误”的方式使用现有约定。听起来您希望父对象的日期是“最后一次修改子对象的时间”。

改用公式。

为此,您可以使用 formula .使用公式,您无需直接修改父对象即可获得您想要的内容,并且您仍然可以使用动态查找器和其他 Grails 糖。

class Parent {
...
Date lastChildUpdated

static hasMany = [ children: Child ]

static mapping = {
...
lastChildUpdated formula: '(SELECT max(c.last_updated) FROM child c WHERE c.parent_id = id)'
}
}

每当您从数据库中读取对象时,GORM 都会加载公式的值。现在,每当您保存子项时,父项将拥有该属性的准确值,而无需触摸父项。

关于grails - 更新 Grails 中父域类中的 "lastUpdated"字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11211367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com