3

FundTypeレガシーデータベーステーブルにマップしようとしているGrails 2.2.3ドメインクラスがあります。と の 2 つのフィールドがcodeありdescriptionます。ドメインクラスを使用するときはいつでも、できれば生成された足場のいずれかでid呼び出されるようにしたいと思います。codeしかし、名前キーを使用するたびに、次のid例外が発生します。

| Error 2013-07-24 09:38:44,855 [localhost-startStop-1] ERROR context.GrailsContextLoader  - Error initializing the application: Error evaluating ORM mappings block for domain [com.company.scholallow.FundType]:  null
Message: Error evaluating ORM mappings block for domain [com.company.scholallow.FundType]:  null

これは、私のドメインクラスで構成されているものです:

class FundType {

    String id
    String description

    static mapping = {
        id column: 'fund_code', generator: 'assigned', name: 'code'
        description column: 'fund_desc'
    }
}

FundType インスタンスを使用しているときはいつでも、fundTypeInstance.codeand NOTのようなコードを呼び出したいと思いますfundTypeInstance.id。私はidではなくコードと呼ばれるものを扱っているので、これは私にとってよりユーザーフレンドリーになります。

だから私は知りたいのですが、私がやりたいことは可能ですか?そして、この ORM マッピング エラーを引き起こしているドメイン クラスで間違っていることは何ですか?

編集:

さて、ドメイン クラスを次のように変更したところ、FundType not found with ID null エラーが発生しました。

class FundType {

    String code
    String description

    static mapping = {
        id generator: 'assigned', name: 'code'
        code column: 'fund_code'
        description column: 'fund_desc'
    }
}

Hibernateが何をしているかを確認するためにいくつかのSQLログを追加しました。これが出力されたものです:select * from ( select this_.FUND_CODE as RTVFTYP1_1_0_, this_.FUND_DESC as RTVFTYP2_1_0_ from RTVFTYP this_ ) where rownum <= ?

4

2 に答える 2

7

ドメイン クラスのString code代わりに使用します。String id

あなたは、値が(主キー)として割り当てられているcodeテーブル列にマップするプロパティを使用したいことをGORMに意図的に言及しています。その場合は、の代わりにドメイン クラスでプロパティを定義するだけで済みます。fund_codeidcodeid

于 2013-07-24T15:05:20.620 に答える