2010-07-20 2 views
1

나는 2 개의 테이블이 있습니다 :최대 절전 모드에서이 관계를 매핑하는 방법은 무엇입니까?

테이블 Data : id에 더하여 많은 필드가 있습니다. 이 필드 중 일부는 다음 표의 다국어 값을 참조하는 '코드'입니다 (예 : country_code, continent_code).

열 다국어 코드가 포함 된 테이블 Thesaurus : code, code_type, language, text을. 코드는 code_type에 대해 고유하지만 여러 'code_type'값을 사용하여 동일한 코드가 여러 번 나타날 수 있습니다. 이 테이블에서

예 데이터 :

code code_type language text 
---------------------------------------------------- 
USA  CNT   EN   United States 
USA  CNT   FR   Etats-Unis 
FR  CNT   EN   France 
FR  CNT   FR   France 
FR  LNG   EN   French 
FR  LNG   FR   Français 

그래서 데이터 테이블의 country_code 열이 'FR' 또는 'US'를 포함 할 수 있습니다와 language code 열뿐만 아니라 'FR' 포함되어있을 수 있습니다. country_code 열에는 국가에 대해 'CNT' 유형의 코드가 포함되고 language_code 열에는 언어에 대해 'LNG'유형의 코드가 포함된다는 암시가 있습니다.

내 자바 코드에 그런 일을 할 수 있도록 내가 Hibernate에서이 매핑 할 수 있습니다 방법 : 이

myData.getCountryCode(currentLocale.getlanguage()); --> returns 'France' 
myData.getLanguageCode(currentLocale.getlanguage()); --> returns 'French' 

주 (의이 응용 프로그램의 현재 로케일을 가정하자 미국 영어입니다)이 그럴 수 없어 modifiy DB 스키마, 나는 자신을 설계하지 않았다!

답변

1

국가 코드와 언어 코드 (필드 코드, 언어 및 텍스트 포함)에 대해 동일한 추상 클래스를 구현하는 두 가지 POJO 목록을 Data 클래스에 둘 수 있습니다. 이들을 매핑하려면 "상속 매핑"을 단일 테이블 전략으로 사용하고 code_type 열을 discriminator 열로 정의 할 수 있습니다.

myData.getCountryCode(currentLocale.getlanguage()).getText(); --> returns 'France' 
    myData.getLanguageCode(currentLocale.getlanguage()).getText(); --> returns 'French' 

을 다음과 같이

@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
    @DiscriminatorColumn(name = "code_type", discriminatorType = DiscriminatorType.STRING) 

당신은 언어 코드 또는 국가 코드를 조회 할 수 있습니다 그리고 당신은 고유 한대로 코드, code_type 및 언어 열을 정의 할 수 있습니다. 자세한 내용은

는 최대 절전 모드 "매핑 상속"섹션에게 답변을 here

+0

감사를 참조하십시오. 나는 추상 클래스 + 상속 매핑 비트를 얻는다. 그것은 좋은 생각 같다. 그러나 데이터 엔터티 측면에서 관계를 매핑하는 방법을 제안 하시겠습니까? joinColumn으로 language_code 열을 사용하는 일대 다? 이 예제에서와 같이 언어 코드를 키로 사용하여 다른 언어에 대한 엔티티가 포함 된지도로 끝내려면 어떻게해야합니까? –

+0

좋아, 알았어 : 관계에 Map 을 사용하고 @MapKey 주석을 사용하여 언어가 Map의 키가되도록 지정합니다. –

관련 문제