【问题标题】:Grails GORM-force an update statement even if GORM doesn't think the instance is dirtyGrails GORM 强制更新语句,即使 GORM 认为实例不脏
【发布时间】:2019-06-06 16:50:13
【问题描述】:

我遇到了一种情况,GORM 没有检测到对象已更改,因此既不会失败也不会生成 sql UPDATE 语句。换句话说:

 //by the time I get here, it doesn't do anything good or bad
 team.save(failOnError:true, flush:true)
 //doesn't throw an error, doesn't log an UPDATE statement

有没有办法强制 GORM 运行更新语句,而不管它是否认为一个实例需要更新?

【问题讨论】:

    标签: grails grails-orm


    【解决方案1】:

    如果在实例未附加到休眠会话或处于只读模式时设置了值,则会发生这种情况。如果您在此类实例上设置属性,然后决定保存它,您可以这样做:

      <A Domain Csass nam reference here>.withSession{session->
          if(!item.isAttached()){
               item.attach();
          }
          else if(session.isReadOnly(item)){
                session.setReadOnly(item,false)
           }
            item.properties=item.properties // force gorm to see changed properties; comes with data binding overhead though
           item.save(failOnError:true)//should generate update now
      }
    

    【讨论】:

    • 请注意,这个解决方案没有解决“有没有办法强制 GORM 运行更新语句,而不管它是否认为实例需要更新?”,这个解决方案有助于避免一些实例有改变了,而 GORM 并不“知道”它已经改变了。
    【解决方案2】:

    您可以尝试以下方法:

    team.markDirty()
    team.save()
    

    【讨论】:

      猜你喜欢
      • 2015-02-26
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多