Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 暂时禁用grails自动夯实_Hibernate_Grails_Domain Model - Fatal编程技术网

Hibernate 暂时禁用grails自动夯实

Hibernate 暂时禁用grails自动夯实,hibernate,grails,domain-model,Hibernate,Grails,Domain Model,我有一个grails的工作,就是对我的数据进行一些处理。这涉及在一些字符串操作之后更新标题字段 我试图让lastUpdated戳记不受上述过程的影响,因为用户通常会按lastUpdated排序 有没有办法暂时禁用自动时间戳?我正在使用Grails2.4.5 我尝试过这个建议,但没有奏效,而且大大降低了处理速度(4秒变为30秒) **更新** 此外,我也不寻求涉及创建仅更新特定场景(atm)的新字段的解决方案。有一个名为autoTimeflag的标志 示例用法: static mapping =

我有一个grails的工作,就是对我的数据进行一些处理。这涉及在一些字符串操作之后更新标题字段

我试图让lastUpdated戳记不受上述过程的影响,因为用户通常会按lastUpdated排序

有没有办法暂时禁用自动时间戳?我正在使用Grails2.4.5

我尝试过这个建议,但没有奏效,而且大大降低了处理速度(4秒变为30秒)

**更新**
此外,我也不寻求涉及创建仅更新特定场景(atm)的新字段的解决方案。

有一个名为autoTimeflag的标志

示例用法:

static mapping = {
autoTimestamp false
}

负责根据
autoTimestamp
映射设置设置时间戳的类为

我尝试使用Groovy类别和拦截器拦截handleTimestampingBeforeUpdate调用:两者都不起作用。我怀疑ClosureEventListener正在另一个线程中运行。我没有尝试使用ExpandoMetaClass,因为这会导致全局更改,影响所有
save()
的尝试

推荐 我认为你最好的选择是:

  • 关闭映射闭包中的自动时间戳
  • 向域类添加临时布尔属性,并将其用作启用/禁用更新lastUpdated属性的标志
  • 将beforeUpdate闭包添加到域类中,并根据瞬态标志手动设置(或不设置)lastUpdated属性
  • 在调用
    save()
    之前,修改作业以禁用标志。另一种方法是实现一个自定义的
    save()
    方法
  • 重要的
    这种方法需要关闭autoTimestamp,因为ClosureEventListener在调用前更新()后设置时间戳。因此,如果未关闭autoTimestamp,则在beforeUpdate()中对LastUpdate所做的更改将被覆盖。

    我知道这一点,但看起来您无法在运行时对其进行更改。
    static mapping = {
    autoTimestamp false
    }