如何将外键映射为Grails中的主键?

时间:2012-08-06 12:39:12

标签: database grails mapping gorm legacy

我有一个遗留数据库,它具有与主键和外键相同的属性。我正试图从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

1 个答案:

答案 0 :(得分: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很简单,工作正常。

这种策略被称为主键关联,您可以在here中找到关于它的良好讨论。

我希望它有所帮助!

相关问题