[SQL] JPA 기본 쿼리는 반환 개체하지만 역 참조 클래스 캐스트 예외가 발생 가입
SQLJPA 기본 쿼리는 반환 개체하지만 역 참조 클래스 캐스트 예외가 발생 가입
나는 테이블에 가입 JPQL 기본 쿼리를 사용하고 쿼리 결과가 목록에 저장되는
public String getJoinJpqlNativeQuery() {
String final SQL_JOIN =
"SELECT v1.bitbit, v1.numnum, v1.someTime, t1.username,
t1.anotherNum FROM MasatosanTest t1
JOIN MasatoView v1 ON v1.username = t1.username;"
System.out.println("get join jpql native query is being called
============================");
EntityManager em = null;
List<Object[]> out = null;
try {
em = EmProvider.getDefaultManager();
Query query = em.createNativeQuery(SQL_JOIN);
out = query.getResultList();
System.out.println("return object ==========>" + out);
System.out.println(out.get(0));
String one = out.get(0).toString(); //LINE 77 where ClassCastException
System.out.println(one);
}
catch(Exception e) {
}
finally {
if(em != null) { em.close; }
}
}
문제는
에서 System.out.println ( "반환 객체 ==========>"+ 아웃); 출력 :
return object ==========>
[[true, 0, 2010-12-21 15:32:53.0, masatosan, 0.020],
[false, 0, 2010-12-21 15:32:53.0, koga, 0.213]]
에서 System.out.println (아처 (0))를 출력한다 :
[true, 0, 2010-12-21 15:32:53.0, masatosan, 0.020]
그래서 내가 문자열해야 봐 이걸 (0)의 반환 값을 할당 할 수 있다고 가정 :
String one = out.get(0).toString();
그러나 나는 이상한 ClassCastException이 얻을.
java.lang.ClassCastException: java.util.Vector cannot be cast to
[Ljava.lang.Object;
at local.test.jaxrs.MasatosanTestResource.getJoinJpqlNativeQuery
(MasatosanTestResource.java:77)
그래서 정말 무슨 일이야? 심지어 개체 [] = foo를 이라구 (0); ClassCastException를 슬로우 것입니다 :(
해결법
-
==============================
1.나는 JPQL 기본 쿼리에 익숙하지 해요,하지만 당신은 단순히 함께 디버깅 :
나는 JPQL 기본 쿼리에 익숙하지 해요,하지만 당신은 단순히 함께 디버깅 :
이라구 = O 개체 (0); 에서 System.out.println (o.getClass ());
그리고 거기에서 작동합니다. 그것은 반복 처리를 통해 벡터, 그리고 벡터에서 무엇을 찾을 경우.
-
==============================
2.하나 이상의 열 또는 엔티티보다 SELECT 절 쿼리 결과가 (오브젝트 [])를 java.util.List에 의해 반환이 getResultList에 () 객체 배열 집계된다.
하나 이상의 열 또는 엔티티보다 SELECT 절 쿼리 결과가 (오브젝트 [])를 java.util.List에 의해 반환이 getResultList에 () 객체 배열 집계된다.
//--- Query query = manager.createQuery("SELECT v1.bitbit, v1.numnum, v1.someTime, t1.username, t1.anotherNum FROM MasatosanTest t1 JOIN MasatoView v1 ON v1.username = t1.username;"); List results = query.getResultList( ); // Fetches list containing arrays of object Iterator it = results.iterator( ); while (it.hasNext( )) { Object[] result = (Object[])it.next(); // Iterating through array object Boolean first = (Boolean) result[0]; // Fetching the field from array /* Likewise for all the fields, casting accordingly to the sequence in SELECT query*/ } //---
편집하다 : 명시 적으로 캐스팅 방지하려면 적절한 인수를 사용하여 개체에 생성자를 추가, 생성자 표현 갈 수 있습니다.
SELECT new org.somepackage.XEntity(x.a, x.b) FROM XEntity x
from https://stackoverflow.com/questions/4536655/jpa-native-query-join-returns-object-but-dereference-throws-class-cast-exception by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 왜 PostgreSQL는 작은 테이블에 내 인덱스를 사용하지 않는? (0) | 2020.06.19 |
---|---|
[SQL] 어떻게 웹 브라우저에서 오디오 및 비디오 파일을 재생하려면? (0) | 2020.06.18 |
[SQL] 어떻게 "유산"외부 왼쪽 오라클에 문을 가입 변환합니까? (0) | 2020.06.18 |
[SQL] 옵션 where 절 재스퍼 보고서 (0) | 2020.06.18 |
[SQL] SQL을 뺀 팬더 아날로그는 / 여러 열을 사용하여 연산자를 EXCEPT (0) | 2020.06.18 |