2008-10-08 4 views
2

이 상황에서 최대 절전 모드가 "올바른"가치를 위해 "올바른 일"을 수행 할 수 있습니까?최대 절전 모드에서 사용자 유형 조인

from ClassA a, ClassB b 
where a.prop = b.prop 

사실 prop는 조인 된 테이블에 다른 표현이있는 UserType입니다. 테이블 A에서는 정수로 표현되며 테이블 B에서는 char로 표현됩니다. 따라서 eq 테스트는 1 == 'a'가 다소 차이가 있는지를 확인하기 위해 변환됩니다.이 값은 false이지만 1 또는 'a'로 표시된 객체는 동일해야하므로 true를 비교해야합니다.

답변

0

(1) "prop"에 매핑되는 열의 데이터 유형을 동일하게 변경하십시오. 이것은 "DBA를 친구로 만드는 것"을 필요로 할 것이지만 "prop"UserType 사용을 공고하게합니다.

(2)는 SQL 표현식을 사용하여 조인 수행 방법

public boolean equals(Object x, Object y) throws HibernateException { 
    boolean retValue = false; 
    if (x == y) retValue = true; 

    if (x!=null && y!=null){ 
     Character xChar = new Character(x); 
     Character yChar = new Character(y); 
     if (xChar.equals(ychar)){ 
      retValue = true; 
     } 
    } 

    return retValue; 
} 
+0

1은 동일한 데이터베이스를 사용하는 기존 시스템의 문제이므로 옵션이 아닙니다. 2. SQL로 변환되지 않습니다. –

0

) (등호의 유형 차이를 처리합니다. 그렇게하면 쿼리 자체에서 형식 변환을 명시 적으로 수행 할 수 있습니다.

2

매핑 파일의 관계에 <formula> 태그를 사용하여이 작업을 수행 할 수 있다고 생각합니다. 예를 들어

: 나는 다른 테이블의 문자 필드에 하나의 정수를 사용하는 경우 두 테이블을 연결하려면이 옵션을 사용하지만, 연결 한

<many-to-one name="myClassB" class="ClassB"> 
    <formula>--Some SQL Expression that converts between ClassA.prop and ClassB.prop</formula> 
</many-to-one> 

. 이것은 정확히 당신이 찾고있는 것이 아니 겠지만 어쩌면 올바른 길로 인도 할 것입니다.

관련 문제