我有一个域类Zbusiness
,我想将数据插入到zbusiness表中,但是我不想使用grails默认ID来插入数据,所以我使用id generator:'assigned', name:'zid',
,因为我现在用zid
表的zbusiness
列替换了grails默认主键ID。我无法将数据插入数据库。它显示Error initializing the application: Error evaluating ORM mappings block for domain [myshaheen.Zbusiness]: nullMessage: Error evaluating ORM mappings block for domain [myshaheen.Zbusiness]: null
ids should be manually inserted before save
我应该怎么做?是否有任何方法可以将zid
作为id
传递以将数据插入zbusiness
表中。
我希望默认的id field
将自动由zid value
代替而不是手动。我将输入xshort,xtaxnum ,xadd1 ,xadd2
,并且zid字段将填充特定值,就像id
这是我的 Realm 类(class)
//Zbusiness.groovy
class Zbusiness implements Serializable{
String xshort
String xtaxnum
String xadd1
String xadd2
static mapping = {
version false
id generator:'assigned', name:'zid'
xtaxnum length: 100
xshort length: 100
xadd1 length: 100
xadd2 length: 100
}
最佳答案
您的ID映射执行两个功能:
generator:'assigned'
-表示您将手动设置ID。 name:'zid'
-将ID属性从id
更改为zid
。 请注意,
name
属性更改了ID属性,而不是列。你说:...因为我已经用我的zbusinesstable的zid列替换了grails的默认主键ID ...
但这不是事实。相反,您将部分Grails的默认ID属性
id
替换为zid
。我之所以这么说是因为您指示Grails使用您的域类中不存在的属性(zid
)。现在怎么办?
由于
zbusiness
表具有一个名为zid
的主键列,要将其用作域类的ID,您将需要使用column属性:id generator:'assigned', column:'zid'
使用上面显示的映射,您可以创建
Zbusiness
的实例,如下所示:def instance = new Zbusiness(id: 123, xshort: 'a', xtaxnum: 'b', xadd1: 'c', xadd2: 'd').save()
在上面的示例中,我使用名为id的属性在
save()
实例之前手动设置了id。关于postgresql - 用用户定义默认ID映射zid不允许插入数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33734967/