rdm*_*ler 19 grails grails-orm
我试图改变grails中的标准'id':
calls Book {
String id
String title
static mapping {
id generator:'assigned'
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我很快发现这打破了我的自举.代替
new Book (id:'some ISBN', title:'great book').save(flush:true, failOnError:true)
Run Code Online (Sandbox Code Playgroud)
我不得不使用
def b = new Book(title:'great book')
b.id = 'some ISBN'
b.save(flush:true, failOnError:true)
Run Code Online (Sandbox Code Playgroud)
否则我会在调用save()'错误之前手动分配这个类的'ID.
但到目前为止还可以.
然后我在bookController的保存操作中遇到了同样的问题.但这一次,解决方法并没有成功.
有什么建议?
我知道,我可以重命名id,但之后我将不得不改变所有的脚手架视图......
Bur*_*ith 18
这是数据绑定的一个特征.你不想提交的数据能够改变像管理的字段id和version,让你使用的绑定所有可用的属性,除了这两个地图的构造函数(它也忽略任何值class,metaClass和其他一些).
所以这里有一点不匹配,因为这个值不是由Hibernate/GORM管理的,而是由你管理的.如您所见,解决方法是您需要分两步而不是一步创建对象.
我无法复制这个问题(使用Grails 2.0.RC1).我认为它可能就像静态映射上缺少等号一样简单= {(你只是有静态映射{)
这是域对象的代码:
class Book {
String id
String name
static mapping = {
id generator:'assigned'
}
}
Run Code Online (Sandbox Code Playgroud)
在BootStrap.groovy里面:
def init = { servletContext ->
new Book(name:"test",id:"123abc").save(failOnError:true)
}
Run Code Online (Sandbox Code Playgroud)
它对我来说很好.我认为id为123abc.