postgresql - 用用户定义默认ID映射zid不允许插入数据

标签 postgresql grails

我有一个域类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]: 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字段将填充特定值,就像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/

    相关文章:

    python - 使用 python 从 SQL 表生成 XML

    database - postgresql 9.更新不工作

    json - Postgres JSON 字段

    python - Django 映射到 Postgres citext 数组返回一个 str 而不是一个列表

    Grails Release 插件未在远程 maven 存储库上部署插件

    java - 如何使用 Tomcat 上的 Grails 在我的网络应用程序(用于上传相册)中创建一个新文件夹?

    jquery - grails 2.4.4 jQuery datepicker

    postgresql - 对象在 PostgreSQL 数据库中的物理位置?

    grails - 独立使用GORM使用Domain.findBy [property]时遇到的问题

    grails - 在 Grails 中创建 war 时从插件中删除特定的 jar