0

リバース エンジニアリングを行い、データベース内の特定のテーブル スキーマのモデル クラスを作成しようとしています。

テーブルの名前はinfopac_usersProvaで、2 つの列があります。

  • ID である strCip varchar(15)
  • 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 の列名を指定する必要があるのは、その行を取り出すと、モデルが strCip ではなく str_cip を取得しようとするためです。そして、「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 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')
    }
}

しかし、それはstrCipnullではありません。しかし、知る限り、null ではない id 列が必要なので、これを回避する方法はありません。少なくとも grails/hibernate では。

そして、あなたがstrCip決して含まれないようにしたい場合save()は、指定する必要があります

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

マッピングブロックで。insertorと呼ばれる制約を認識しておらず、updateそこで無視されることを期待しています。

于 2013-03-20T10:37:04.463 に答える
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

これには少し遅れているかもしれませんが、代わりに updateable および insertable プロパティを使用する必要があります。それは私のために働いた:

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 に答える