2012-08-06 99 views
1

我有一個與主鍵和外鍵具有相同屬性的遺留數據庫。我試圖從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: Foreign key as primary key?但它並沒有爲我工作:當我使用的複合鍵,Grails的問我對於accommodation_id,但我沒有此屬性在我的表中,因爲它是id

+0

等等。你想使用accomodation id作爲AccomodationPrice的id,還是你想要一個帶有id/accomodation id的組合鍵? – 2012-08-06 19:32:19

+0

我想使用住宿ID作爲AccommodationPrice的ID。 – ZoT 2012-08-07 06:41:51

回答

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的gorm上找到關於它的良好討論。

我希望它有幫助!

+0

感謝您的提示,但這不是我想要做的。我想使用我的主鍵在AccommodationPrice中的外鍵住宿ID。我嘗試使用不同的選項(使用_name:_,不使用_name:_,使用_column:_,不使用_column:_)嘗試使用不同的選項(但沒有使用它們)。 – ZoT 2012-08-07 07:32:02

+0

好的。我發現了一些可行的方法。編輯我的答案。一探究竟。 – 2012-08-07 18:13:21