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 回答