2011-01-05 3 views
4

나는 데이터베이스에 테이블을 가지고 있는데, Hibernate에 매핑 된 주 객체는 그 자체와 관계가 있고 그 객체는 매우 크기 때문에 결과 집합에서 일부 열만로드하려고한다. . 나는 HBM 파일에 네이티브 SQL 쿼리를 정의 :Hibernate 네이티브 SQL 쿼리로 일부 열만로드한다.

<sql-query name="query"> 
    <return alias="r" class="RawData"/>  
    <![CDATA[ 
     SELECT DESCRIPTION as {r.description} 
     FROM RAWD_RAWDATAS r  
     WHERE r.RAWDATA_ID=? 
     ]]> 
</sql-query> 

이 쿼리는 그러나 오류와 함께 실패 : 는 결과 집합에서 열 값을 읽을 수 없습니다 : RAWDATA1_14_0_; 잘못된 컬럼 이름 SQL 에러 : 17006, SQLState : null, Hibernate는 결과 셋에서 모든 필드를로드하려고하기 때문에. 나는 또한 Hibernate JIRA (http://opensource.atlassian.com/projects/hibernate/browse/HHH-3035)에서 버그를 발견했다. 해결 방법을 사용하여이 작업을 수행하는 방법을 아는 사람은 누구입니까?

+0

비슷한 질문이 도움이 될 수도 있습니다 http://stackoverflow.com/questions/4186828/doubt-regarding-jpa-namedquery/4191511 –

+0

RAWDATA_ID를 포함하여 필요한 열을 간단히 매핑하는 것이 어떨까요? 그것들을 객체에 매핑 한 다음 그 객체에 작업하여 Description 필드 만 가져옵니다. – bluish

+0

관계가 다음과 같기 때문에이 작업을 수행 할 수 없습니다. RawData -> RawData. RawData 자체가 연결되어 있습니다. –

답변

2

네이티브 SQL 쿼리를 사용하고, 당신이 결과 변압기 사용해야 할 수도 있습니다 :

http://docs.jboss.org/hibernate/core/3.5/api/org/hibernate/Query.html#setResultTransformer(org.hibernate.transform.ResultTransformer를)

편집 : 그의 JPA 기능은 여기에 설명되어 있습니다 : http://download.oracle.com/javaee/5/api/javax/persistence/SqlResultSetMapping.html

+0

아뇨, 거의 확실하지 않습니다. 즉, 수화 ​​된 후 결과가 사용자에게 반환되기 바로 전에 결과에 적용됩니다. – araqnid

1

당신은 단지 속성이 아니라 개체를 선택하려면, <return-scalar...> 지정 예 :

<sql-query name="AdvertDisplayRule.fetchActiveRuleSet"> 
    <return alias="ad" entity-name="com.wahanda.service.media.domain.Advert" /> 
    <return-scalar column="view_count" type="integer" /> 
    <![CDATA[ 
    SELECT {ad.*}, avd.view_count 
    FROM adv.advert {ad} 
     LEFT OUTER JOIN adv.advert_view_distribution avd ON avd.advert_id = {ad}.advert_id 
    ]]> 
</sql-query> 
+0

전체 개체가 아닌 개체의 일부 속성 만 선택하고 싶습니다. 개체가 매우 커질 수 있고 개체의 관련된 모든 컬렉션을로드하지 않으려 고하기 때문입니다. 하나의 속성이있는 객체가 아닌 하나의 속성을 반환하기 때문에 코드를 사용할 수 없습니다. –

+0

ResultTransformer를 사용하여 객체를 만들고 단일 속성을 채울 수 있습니다 ... 또한 게으른로드가 아닌 컬렉션이 일반적으로 나쁜 생각 인 이유에 대해서도 생각해 보았습니다. – araqnid

관련 문제