1

主キーと外部キーと同じプロパティを持つレガシー データベースがあります。Grails からマッピングしようとしていますが、問題があります。これは私のドメインクラスです:

class AccommodationPrice {
    Integer id
    Accommodation accommodation

    static mapping = {
         table 'alojamiento_precios'
         id generator: 'assigned', name: accommodation, type: 'integer'
         accommodation column: 'id'
    }
}

これはデータベース テーブルです。

CREATE TABLE alojamiento_precios
(
  id integer NOT NULL,
  CONSTRAINT alojamientoprecios_pkey PRIMARY KEY (id),
  CONSTRAINT "FK alojamiento" FOREIGN KEY (id)
      REFERENCES alojamiento (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

この質問を読みましたGrails: Foreign key as primary key? しかし、それは私にとってはうまくいきませんでした:複合キーを使用すると、grails はaccommodation_idを要求しますが、私のテーブルにはこのプロパティがありません。これはidであるためです。

4

1 に答える 1

0

属性をIDとしてマップするだけの場合は、次のように実行できます():

    class AccommodationPrice {

        String price

        long accomodationId

        static mapping = {
             table 'alojamiento_precios'
             id generator: 'assigned', name:'accomodationId'
         version false
        }

        static transients = ['accomodation']

        Accomodation getAccomodation() {
        Accomodation.get(accomodationId)
        }

        void setAccomodation(Accomodation a) {
             accomodationId = a?.id
        }
    }

必要なタイプを宣言する必要はありません。GORMは、宿泊施設の主キーのタイプを想定しています。ただし、一部の基準クエリを使用すると問題が発生する可能性があります。しかし、HQLは単純で、問題なく機能します。

この戦略は主キーの関連付けとして知られており、ここでgormでそれについての良い議論を見つけることができます。

お役に立てば幸いです。

于 2012-08-06T19:50:34.840 に答える