我试图在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)的功能。您不希望提交的数据能够更改id
和version
之类的托管字段,因此您正在使用的Map构造函数绑定(bind)除这两个之外的所有可用属性(它还会忽略class
,metaClass
和其他一些值) )。
因此这里有些不匹配,因为该值不是由Hibernate / GORM而是由您管理。如您所见,解决方法是您需要分两步而不是一步来创建对象。