即使GORM认为实例不脏,也可以使GORM强制执行更新语句

时间:2019-06-06 16:50:13

标签: grails gorm

我遇到了以下情况: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运行更新语句,而不考虑实例是否需要更新?

2 个答案:

答案 0 :(得分:0)

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

  <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
  }

答案 1 :(得分:0)

您可以尝试以下操作:

team.markDirty()
team.save()