2009-11-25 8 views
2

나는 다음과 같은 구조를 포함 읽기 전용 목적으로 lecagy 데이터베이스 매핑해야합니다 : 열 productTyp의 값에 따라최대 절전 모드 매핑 조건부 대일

Table MAIN: 
id productId productType 

Table PRODUCT_A: 
id description_a 

Table PRODUCT_B: 
id description_b 

Table PRODUCT_C: 
id description_c 

을, 제품 ID는에 하나를 의미한다 PRODUCT_A, PRODUCT_B 또는 PRODUCT_C.

각 테이블마다 Java 엔티티를 만듭니다. Main 클래스는 각 제품에 대해 하나의 컬렉션을 포함합니다.

제품이 주류와 '관계가 없습니다'. 독립된 실체로서 다른 상황에서 사용됩니다.

hbm.xml 파일을 사용하여 매핑하는 방법이 있습니까?

+0

왜 .hbm.xml입니까? 특수 효과를 사용할 수 없습니까? – Bozho

+0

번호. 하지만 아무런 차이가 없어야합니다. – bertolami

답변

2

이지도하는 적절한 방법은 <any> 경유 :

<class name="Main" table="MAIN"> 
    ... 
    <any name="product" id-type="long" meta-type="string"> 
    <meta-value value="PRODUCT_A" class="ProductA"/> 
    <meta-value value="PRODUCT_B" class="ProductB"/> 
    <meta-value value="PRODUCT_C" class="ProductC"/> 
    <column name="productType"/> 
    <column name="productId"/> 
    </any> 
</class> 

당신은 (아마도 당신이 이미 가지고있는) 해당 테이블에 적절한 ProductA 등 ... 클래스를 매핑해야합니다.

3

판별자를 사용하여 하위 클래스 별 전략을 사용하여 상속을 찾고있는 것처럼 보입니다. Java에서 각 PRODUCT_X 클래스는 Main 클래스를 확장해야합니다. This page은이 전략을 구현하는 세부 사항을 설명합니다.

+0

도 상속을 사용할 수있는 것처럼 보였습니다.하지만 제품 클래스는 기본 클래스와 '멀리있는'관계에 있습니다. – bertolami

+0

여기에 OO 디자인을 수행하지 않고 있다는 것을 기억하십시오. 기존 테이블을 매핑하는 가장 효과적인 방법을 찾습니다. 테이블 구조를 다시 디자인하는 사치가 있다면 상속이 최선의 해결책인지 아닌지에 대해 걱정할 것입니다. 하지만 그 이후로는 그렇지 않습니다. 불행히도 우리는 일을 끝내기 위해 약간의 타협을해야합니다. –

+0

가 동의합니다. 그러나 다른 많은 테이블이 관련되어 있기 때문에 나는 아직도 망설이다. – bertolami

관련 문제