Postgresql 将默认id映射为用户定义zid不允许插入数据

Postgresql 将默认id映射为用户定义zid不允许插入数据,postgresql,grails,Postgresql,Grails,我有一个域类Zbusiness,我想将数据插入到Zbusiness表中,但我不想使用grails默认id插入数据,所以我使用id生成器:'assigned',name:'zid',由于我已将grails默认主键id替换为我的zbusiness表的zid列,现在我无法将数据插入数据库。初始化应用程序时显示错误:错误评估域[myshaheen.zbusiness]的ORM映射块:null 消息:评估域[myshaheen.Zbusiness]的ORM映射块时出错:在保存之前应手动插入nullid我该

我有一个域类
Zbusiness
,我想将数据插入到Zbusiness表中,但我不想使用grails默认id插入数据,所以我使用
id生成器:'assigned',name:'zid',
由于我已将grails默认主键id替换为我的
zbusiness
表的
zid
列,现在我无法将数据插入数据库。初始化应用程序时显示
错误:错误评估域[myshaheen.zbusiness]的ORM映射块:null
消息:评估域[myshaheen.Zbusiness]的ORM映射块时出错:在保存之前应手动插入null
id
我该怎么做?是否有任何方法将
zid
传递为
id
以将数据插入
Zbusiness
表中

我希望默认的
id字段
将被
zid值
自动替换,而不是手动替换。我将输入
xshort、xtaxnum、xadd1、xadd2
,并且zid字段将填充一个特定值,该值将像
id
一样递增 这是我的域名类 //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映射执行两个功能:

  • 生成器:'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()
    

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

    在保存对象之前是否尝试过设置
    zid
    ?没有,我没有尝试过。我不清楚如何使用它。我在使用jsp servlet的netbeans中使用了setter-getter方法,但在grails中没有使用。它是如何完成的。您当前如何创建
    Zbusiness
    对象?正在创建Zbusiness对象当我运行应用程序时。但是`初始化应用程序时出错:为域[myshaheen.Zbusiness]计算ORM映射块时出错:null消息:为域[myshaheen.Zbusiness]计算ORM映射块时出错:null`显示此错误。但当我评论这两行时,版本FalseID生成器:'assigned',名称:'zid'然后grails主页显示,我可以通过单击ZbusinessControllerwhere来插入数据我应该在控制器内还是在域类内创建def实例?我只想手动设置id其他字段将由用户输入填充它不工作我编写了def实例=新的Zbusiness(id:123)。save()在控制器中。我没有编写其他4个变量,因为它们将使用grails crud功能保存。我需要手动保存id值,如6500065001等。上次使用的id生成器:'sequence',column:'zid',type:'long'现在正在保存id值,但1,2,3不是我指定的值。首先,要保存实例,它必须通过验证。在您的示例域类中,其他四个属性不可为null,因此,如果不赋值,则保存之前的值将失败。其次,您分配的id将被拒绝,因为生成器设置为Sequences,需要将其设置为assigned。这是我卡住的地方。我已将id generator设置为assigned,但如何分配任何值我应该给出默认值:650000?例如*id generator:'assigned',column:'zid',type:'long',默认值:650000**,因为我设置了**id generator:'assigned',但它不起作用