繁体   English   中英

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

[英]How to mapping Foreign key as Primary Key in Grails?

我有一个与主键和外键具有相同属性的旧数据库。 我正在尝试从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:外键作为主键? 但这对我不起作用:当我使用组合键时,grails要求我提供accommodation_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上找到有关它的很好的讨论。

希望对您有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM