0

我正在尝试进行逆向工程并为数据库中的给定表模式创建模型类。

该表的名称是infopac_usersProva,它有两列:

  • strCip varchar(15) 这是 id
  • USERNM varchar(75)

我写了这样的模型:

    class Infopac_usersProva {

       String strCip 
       String usernm

       static mapping={
        datasource 'gpaq'
        table 'infopac_usersProva'
        version false
        columns{
            id column: 'strCip'
            usernm column: 'USERNM', sqlType: "varchar(75)"
            strCip column: 'strCip', sqlType: "varchar(15)"
        }
       }

       static constraints = {
        strCip (nullable:true, insert:false, update:false)
       }
    }

但我得到这个错误:

实体映射中的重复列:edu.upc.gpaq.domain.generic.Infopac_usersProva 列:strCip(应使用 insert="false" update="false" 映射)

我需要为 strCip 指定列名,因为如果我取出该行,模型将尝试获取 str_cip 而不是 strCip。如果我取出 "id column: 'strCip' 然后我得到一个错误,说没有 id 列。

我究竟做错了什么?

4

4 回答 4

1

我认为你可以摆脱strCip定义。
而是正确定义 id 字段。

看看这是否适合你:

class Infopac_usersProva {

String usernm

static mapping={
    datasource 'gpaq'
    table 'infopac_usersProva'
    version false
    columns{
        id generator: 'assigned', name: 'strCip', type: 'string'
        usernm column: 'USERNM', sqlType: "varchar(75)"
    }
}

这个我没查。。。

于 2013-03-20T08:12:23.907 回答
0

这可能有点晚了,但是您需要改用可更新和可插入的属性。它对我有用:

class Infopac_usersProva {

   String strCip 
   String usernm

   static mapping={
    datasource 'gpaq'
    table 'infopac_usersProva'
    version false
    columns{
        id column: 'strCip'
        usernm column: 'USERNM', sqlType: "varchar(75)"
        strCip column: 'strCip', updateable: false, insertable: false
    }
   }
}
于 2014-05-16T06:15:16.050 回答
0

我最终做了以下事情(见粗体字)

class Infopac_usersProva {

  String usernm
  String id

  static mapping={
    datasource 'gpaq'
    table 'infopac_usersProva'
    version false
    autoTimestamp false
    columns{
        **id column: 'strCip', sqlType: "varchar(15)"**
        usernm column: 'USERNM', sqlType: "varchar(75)"
    }
  }

  static constraints = {

  }
}

现在可以了。十分感谢!

于 2013-03-21T09:01:23.137 回答
0

这个应该工作:

class Infopack_usersProva {
    String strCip
    String usernm

    static constraints = {
        strCip(nullable: false, maxSize: 15)
        usernm(nullable: true, maxSize: 75)
    }

    static mapping = {
        datasource('gpaq')
        table('infopac_usersProva')
        version(false)
        autoTimestamp(false)
        usernm(column: 'USERNM')
        strCip(column: 'strCip')
        id(column: 'strCip', name: 'strCip', generator: 'assigned')
    }
}

但它strCip不为空。但是 AFAIK 你需要一个不为空的 id 列,所以我看不到任何解决方法。至少使用 grails/hibernate。

如果你不想strCip被包含在任何save()你需要指定的

strCip(column: 'strCip', insertable: false, updateable: false)

在映射块中。我不知道任何称为insert或的约束update,并且希望它们在那里被忽略。

于 2013-03-20T10:37:04.463 回答