如何使用Grails中未更改的字段unique更新实例?

如何使用Grails中未更改的字段unique更新实例?,grails,gorm,grails-domain-class,Grails,Gorm,Grails Domain Class,我在尝试更新一个实例时遇到了一个问题,该实例的字段具有约束:unique,但尚未修改 例如: 创建的实例 def sectorEmpresarialInstance = new SectorEmpresarial(codigo:1,nombre:"MY_NAME") sectorEmpresarialInstance.save(flush:true) 编辑实例(此处出错) /* params=(codigo:2,nombre:“我的名字”)看起来nombre没有改变 */ 你有什么问题?

我在尝试更新一个实例时遇到了一个问题,该实例的字段具有约束:unique,但尚未修改

例如:

  • 创建的实例

    def sectorEmpresarialInstance = new SectorEmpresarial(codigo:1,nombre:"MY_NAME")
    sectorEmpresarialInstance.save(flush:true)
    
  • 编辑实例(此处出错)

    /* params=(codigo:2,nombre:“我的名字”)看起来nombre没有改变 */


  • 你有什么问题?任何错误、异常或只是不知道如何保存?您必须首先从数据库中检索到的对象开始更新它。如果使用def a=SectorEmpresarial.findByNombre('somename'),然后设置a.codigo=10,然后设置a.save(),则该行应该更新。您不能仅仅创建一个新实例,将nombre设置为相同的值,然后期望它更新。你必须有一个“连接数据库”的SectoreMpreSerial实例,我对Grails3.0.9和Grails3.0.12也有同样的问题。我们有一个具有唯一约束的域类,只有当我们更改该字段值时,值才会更新。我们正在手动绑定tha值,而不是使用.properties=params。这是虫子吗?如果删除了唯一约束,则效果良好
    def sectorEmpresarialInstance = new SectorEmpresarial(codigo:1,nombre:"MY_NAME")
    sectorEmpresarialInstance.save(flush:true)
    
    def sectorEmpresarialInstance = SectorEmpresarial.findByCodigo(1)
    sectorEmpresarialInstance.properties = params 
    sectorEmpresarialInstance.save(flush:true) // Here present error because nombre has constraint: unique.