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

Database 如何在Grails中将外键映射为主键?,database,grails,mapping,gorm,legacy,Database,Grails,Mapping,Gorm,Legacy,我有一个与主键和外键具有相同属性的遗留数据库。我试图从Grails映射它,但我有问题。这是我的域类: class AccommodationPrice { Integer id Accommodation accommodation static mapping = { table 'alojamiento_precios' id generator: 'assigned', name: accommodation, type: 'i

我有一个与主键和外键具有相同属性的遗留数据库。我试图从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要求我输入id,但我的表中没有这个属性,因为它是id。

如果您只想将属性映射为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上找到关于它的良好讨论


我希望有帮助

等等。您想将住宿id用作住宿价格的id,还是想要id/住宿id的复合密钥?我想将住宿id用作住宿价格的id。谢谢您的提示,但这不是我真正想要做的。我想在住宿价格中使用外键住宿id作为主键。我尝试使用不同的选项来执行您提到的操作,包括名称:、名称:、列:、列:,但都不起作用。确定。我发现了一些有用的东西。编辑了我的答案。过来看。