2011-09-29 3 views
4

Long을 반환하는 명명 된 네이티브 쿼리를 만들려고합니다. 명명 된 쿼리 오류 - org.hibernate.impl.SessionFactoryImpl -org.hibernate.MappingException : 알 수없는 엔터티 : java.lang.Long

ERROR : 여기

내 orm.xml의 (가능한 한 많은 간체) 파일

<?xml version="1.0" encoding="UTF-8"?> 
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd" 
    version="2.0"> 

<named-native-query name="getCaseNumberByCommId" result-class="java.lang.Long"> 
    <query>SELECT case_id FROM communications WHERE comm_id =(?1)</query> 
</named-native-query> 

</entity-mappings> 

이 내가 얻을 오류입니다 : : 출시 산호] org.hibernate.MappingException : 를 getCaseNumberByCommId 알 수없는 엔티티 : java.lang.Long의

을 나는 또한 단지

"롱"을 지정 시도했습니다

에 의한 값 : 긴 ... 인한 : java.lang.ClassNotFoundException가 : org.hibernate.AnnotationException : 엔티티 클래스를 찾을 수 없습니다 긴

0
<named-native-query name="getCaseNumberByCommId" result-class="Long"> 
    <query>SELECT case_id FROM communications WHERE comm_id =(?1)</query> 
</named-native-query> 

이상하게이 오류가

Java가 java.lang에서 Long을 찾을 수 없습니까?

어떤 단서 주셔서 감사합니다

편집 :이 오류

<named-native-query name="getCaseNumberByCommId" > 
     <query>SELECT case_id FROM communications WHERE comm_id =(?1)</query> 
    </named-native-query> 

얻을 :

상자의 예외가 org.hibernate입니다 나는 '결과-클래스의 주석을 제거하려 .cfg.NotYetImplementedException : 순수 네이티브 스칼라 쿼리가 아직 지원되지 않음

업데이트 *

내가 할 수있는 방법을 발견 한 적이 있지만, 데이터베이스가 comm_id에 고유성 제약 조건을 가지고 있기 때문에, 난 그냥 카운트 대신 매핑 된 POJO 객체를 반환 할 수 있었다.

<named-native-query name="getByCommId" result-class="com.foo.model.Communication"> 
     <query>SELECT * FROM communications WHERE comm_id =(?1)</query> 
    </named-native-query> 

그런 다음 반환 된 pojo에서 원하는 case_id를 가져옵니다. 더 result-class이 매핑 된 엔티티 중 하나를해야이에보고하지 않고 Long 때문에

답변

7

은 엔티티는 AnnotationException을받는 것 중 하나가 아닙니다.

Entity 개체를 반환하는 쿼리 작성에만 사용되므로 매핑에서 result-class을 제거해보십시오.


편집 :

In regard to: org.hibernate.cfg.NotYetImplementedException: Pure native scalar queries are not yet supported :

나는 주위에 신속하게 발굴이 발견 한이 : 내가 읽은

https://hibernate.atlassian.net/browse/ANN-661

:

Workaround is to do such queries using Session.createSQLQuery() or straight JDBC.

는 몇 있습니다 여기에 이러한 쿼리에 대한 예 : http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/querysql.html#d0e17378

sess.createSQLQuery("SELECT * FROM CATS").list();

sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").list();

또는 더 아래 http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/querysql.html#querysql-namedqueries

<sql-query name="mySqlQuery"> 
    <return-scalar column="name" type="string"/> 
    <return-scalar column="age" type="long"/> 
    SELECT p.NAME AS name, 
      p.AGE AS age, 
    FROM PERSON p WHERE p.NAME LIKE 'Hiber%' 
</sql-query> 
+0

Example 18.4에서 내가 결과 수준의 주석을 제거하고이 오류가 시도 감사 : 중첩 예외는 org.hibernate.cfg.NotYetImplementedException입니다 : 순수 네이티브 스칼라 질의는 아직 지원되지 않습니다 – slashdottir

+0

@slashdottir 추가 정보 hel 너 밖으로 나가거나 다른 방법으로 그것을 해결 했니? – edwardsmatt

+0

필자는 마침내 Long을 리턴하는 것을 포기해야했고 대신 매핑 된 pojo 객체를 반환했습니다. 데이터베이스에서 식별자 당 단 하나의 행을 의미하는 고유성 제약이 있음이 밝혀지기 때문에 일할 수있었습니다 이런 식으로이 문제를 해결한다. – slashdottir