使用用户定义的默认id映射zid不允许插入数据

时间:2015-11-16 12:06:16

标签: postgresql grails

我有一个域类Zbusiness,我想将数据插入到zbusiness表中,但我不想使用grails默认id来插入数据,因此我使用了id generator:'assigned', name:'zid',,因为我已经更换了grails我的zid表的zbusiness列的默认主键ID现在我无法将数据插入数据库。它显示Error initializing the application: Error evaluating ORM mappings block for domain [myshaheen.Zbusiness]: null Message: 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字段将填充特定值,如{ {1}} 这是我的域类 //Zbusiness.groovy

id

1 个答案:

答案 0 :(得分:0)

您的ID映射执行两个功能:

  1. generator:'assigned' - 表示您将手动设置ID。
  2. name:'zid' - 将ID属性从id更改为zid
  3. 请注意,name属性会更改ID 属性而非。你说:

    ...因为我用zbusinesstable的zid列替换了grails默认主键id ...

    但事实并非如此。相反,您使用id部分替换了Grails默认ID属性zid。我说部分是因为您指示Grails使用您的域类中不存在的属性(zid)。

    现在怎么办?

    由于zbusiness表有一个名为zid的主键列,要将此列用作域类的ID,您需要使用属性:< / p>

    id generator:'assigned', column:'zid'
    

    通过上面显示的映射,您可以像这样创建Zbusiness的实例:

    def instance = new Zbusiness(id: 123, xshort: 'a', xtaxnum: 'b', xadd1: 'c', xadd2: 'd').save()
    

    在上面的示例中,我使用名为 id 的属性在save()实例之前手动设置 id