2011-03-21 3 views
4

hibernate 명명 된 쿼리는 NUMBER 데이터 타입을 가진 컬럼을위한 BigDecimal을 반환한다.hibernate는 long 대신에 BigDecimal 데이터 타입을 반환한다.

<return-scalar column="col1" type="java.lang.Long" /> 

또는 두 경우 모두

<return-scalar column="col1" type="long" /> 

, 내가 얻을 :

select col1 as "col1" from table1 union select col2 as "col1" from table2 

는 클라이언트 측에서, 나는 COL1의 데이터 형식 내가이 할 길이 (기본)이 될 것으로 예상 :

java.lang.ClassCastException: java.math.BigDecimal incompatible with java.lang.Long 

내가 고칠 수 있을까? 내 suspiscion, 앨리어싱에 문제가 있습니까?

+0

오라클을 사용하고 있습니까? Oracle NUMBERtype은 BigDecimal에 매핑됩니다. –

+1

예. 오라클 10g. 길게 변환하는 방법? – Victor

답변

4

Oracle NUMBER는 기본적으로 최대 절전 모드에서 BigDecimal에 매핑됩니다. 형식을 BigDecimal로 설정하십시오.

+0

어쩌면 나는 명확하지 않다. 어쩌면 당신은 그것을 잘 읽지 않을 것입니다. 의 목적은 Hibernate에서 기본 BigDecimal을 오버라이드하는 것이다. – Victor

1

예, Hibernate는 Java에서 Oracle Number Type을 BigDecimal로 매핑합니다. BigDecimal 계산은 Java에서 비용이 많이 든다. Java에서 BigDecimal을 얻은 후에는 데이터 크기에 따라 BigDecimal Collection을 정수 또는 Long 컬렉션으로 변환하는 유틸리티를 작성하십시오.