是否可以在Grails的Bootstrap.groovy中显式设置域对象的id(或者在任何地方,就此而言)?
我尝试过以下方法:
new Foo(id: 1234, name: "My Foo").save()
和:
def foo = new Foo() foo.id = 1234 foo.name = "My Foo" foo.save()
但是在这两种情况下,当我Foo.list()
在运行时打印出结果时,我看到我的对象被赋予了1的id,或者序列中的下一个id.
编辑: 这是在Grails 1.0.3中,当我使用内置的HSQL数据库在'dev'中运行我的应用程序时.
编辑:
chanwit提供了一个很好的解决方案.但是,我实际上正在寻找一种方法来设置id而不更改我的域的id生成方法.这主要用于测试:我希望能够在我的测试引导程序中将某些内容设置为已知的id值setUp()
,但仍然能够在生产中使用auto_increment或序列.
是的,手动GORM映射:
class Foo { String name static mapping = { id generator:'assigned' } }
并且你的第二个片段(不是第一个片段)将完成这项工作(在通过构造函数传递时不会分配Id).