我试图在grails中更改标准的“id”:

calls Book {
  String id
  String title

  static mapping {
    id generator:'assigned'
  }
}

不幸的是,我很快注意到这打破了我的 bootstrap 。代替
new Book (id:'some ISBN', title:'great book').save(flush:true, failOnError:true)

我不得不用
def b = new Book(title:'great book')
b.id = 'some ISBN'
b.save(flush:true, failOnError:true)

否则,我会收到“在调用save()之前必须手动分配该类的ID”错误。

到目前为止还可以。

然后,我在bookController的save操作中遇到了相同的问题。但是这一次,解决方法没有成功。

有什么建议?

我知道,我可以重命名ID,但是随后我将不得不更改所有支架 View ...

最佳答案

这是数据绑定(bind)的功能。您不希望提交的数据能够更改idversion之类的托管字段,因此您正在使用的Map构造函数绑定(bind)除这两个之外的所有可用属性(它还会忽略classmetaClass和其他一些值) )。

因此这里有些不匹配,因为该值不是由Hibernate / GORM而是由您管理。如您所见,解决方法是您需要分两步而不是一步来创建对象。

10-06 08:04
查看更多