我有一个域类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/

    10-11 03:00