2012-06-19 5 views
0

나는 다음과 같은 DB 스키마가 있습니다어떻게 다음과 같은 최대 절전 모드 매핑을 수행합니까?

table a { 
    id, 
    state 
} 

table b { 
    id, 
    a_id, 
    is_valid, 
    amount 
} 

은 내가 a.state가 특정 값이있는 경우에만 b를 테이블에서 값을 가져 하이버 네이트 매핑을 갖고 싶어합니다. 이것은 내가 가진 최대 절전 모드 매핑 내가 이런 짓을하면

<discriminator column="state" type="string"/> 
<subclass name="ClassB" discriminator-value="VALUE1"> 
    <join table="b"> 
     <key column="a_id"/> 
     <property name="amount" column="amount"/> 
    </join> 
</subclass> 

, 내 XML 계층 구조를 따라야한다는 구문 오류를 보여 주었다합니다 ( jBoss Documentation에서 예를 사용)입니다.

나는 옳은 일을하고 있으며, 그렇지 않다면 앞으로 나아갈 길을 보여줄 수 있다면 좋을 것입니다. 감사.

P.S - 테이블 b의 항목이 둘 이상이면 a_id 열을 갖습니다. 그러나 b의 한 행만 is_valid 값을 가지며, POJO에서이 행을 얻으면 충분합니다.

+0

당신이 전체 매핑과 그 뒤에 자바 객체를 게시하는 경우는 도움이 될 것이다. – Matt

답변

1

discriminator 전략을 사용하여 서브 클래스 당 테이블을 매핑하는 것처럼 보입니다. 이것은 테이블 a와 테이블 b 사이의 1 - 1 행 상관 관계를 암시합니다. 여기서 테이블 b (기본 클래스)의 기본 키는 테이블 a의 외래 키입니다.

그러나, 당신의 매핑은 일반적으로이

<key column="id" /> 

을해야

<key column="a_id" /> 

이 그리고 더 "A_ID"열이 없을 것이라고 약간 이상하다.

그러나 db 디자인은 서브 클래스 관계보다는 일대 다 관계처럼 보입니다.

개체 자체가 없으면 실제로 무엇을 하려는지 말할 수 없습니다.

상속에 대한 최대 절전 모드 문서를 살펴보십시오.

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/inheritance.html

+0

예, 일대 다 관계입니다. 테이블 b의 많은 행은 동일한 a_id 키를 갖습니다. ClassA의 객체를 가져 오면 ClassB의 모든 객체를 db에서 가져오고 싶지 않았기 때문에 일대 다 매핑을 사용하고 싶지 않았습니다. 만약 당신이 여전히 자바 개체를 게시 할 수 있습니다. –

+0

당신이 그들을 게시 할 수 있지만 그들은 요소는 당신이하려고하는 것에 정말로 유용하지 않습니다. 특정 열이 특정 값으로 설정된 경우에만 컬렉션을 가져 오려고합니다. 그게 정말 절전 모드가 당신을 위해 내가 아는 일이 아니에요. – Matt

+0

내가 한 것은 하나의 최대 절전 모드 매핑에서 너무 많은 일들을하기 때문에 다른 최대 절전 모드 매핑에 넣었습니다. –