2012-08-06 4 views
1

기본 키 및 외래 키와 동일한 속성을 가진 기존 데이터베이스가 있습니다. 내가 Grails에서 매핑하려고하는데, 문제가있다. 나는 복합 키를 사용하는 경우, Grails는 나를 묻는다 : 나는 Grails: Foreign key as primary key?는하지만 나를 위해 작동하지 않았다이 질문을 읽어Grails에서 외래 키를 기본 키로 매핑하는 방법은 무엇입니까?

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 
) 

:

class AccommodationPrice { 
    Integer id 
    Accommodation accommodation 

    static mapping = { 
     table 'alojamiento_precios' 
     id generator: 'assigned', name: accommodation, type: 'integer' 
     accommodation column: 'id' 
    } 
} 

이 데이터베이스 테이블은 다음과 같습니다이 내 도메인 클래스입니다 accomodation_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은 가정 : 경우

+0

대기. AccomodationPrice의 id로 숙박 ID를 사용 하시겠습니까? 아니면 id/accomodation id가있는 복합 키를 원하십니까? –

+0

AccommodationPrice의 ID로 숙박 ID를 사용하고 싶습니다. – ZoT

답변

0

은 당신이 원하는 것은 당신이()처럼 할 수있다,라는 id로 속성을 매핑하는 것입니다 숙박 시설 기본 키 유형. 일부 기준 쿼리를 사용할 때 문제가 발생할 수 있습니다. 하지만 HQL은 간단하고 괜찮습니다.

이 전략은 기본 키 연관으로 알려져 있으며 웜에 대한 좋은 토론은 here에 있습니다.

도움이 되었기를 바랍니다.

+0

팁 주셔서 감사하지만 실제로하고 싶은게 아니에요. AccommodationPrice에서 내 기본 키와 같은 외래 키 숙박 ID를 사용하고 싶습니다. 다른 옵션 (_name : _, _name : _, _column : _, _column : _없이)을 사용하여 언급 한 작업을 시도했지만 그 중 아무 것도 작동하지 않았습니다. – ZoT

+0

확인. 나는 작동하는 것을 발견했다. 내 대답을 편집했습니다. 확인 해봐. –