2012-04-24 5 views
0

Object를 Short로 변환하려고합니다. 내 코드는 다음과 같습니다.개체를 Short로 변환

List<Batch> lsMaxBatch = em.createNativeQuery(sqlMaxBatch).getResultList(); 
Iterator iter = lsMaxBatch.iterator(); 
while (iter.hasNext()) { 
    Short batchId = Short.valueOf(iter.next() + ""); 
    ls.add(batchId); 
} 

괜찮습니까?

Short batchId = (Short) iter.next(); 

나는 오류가 발생 : :이 같은 변환하고있는 경우 때문에

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.lang.Short 

덕분에 이런

+0

Object 배열 (Object [])을 Short로 캐스트하려고합니다. 아니, 괜찮지 않아. 'Object []'로 형변환해야합니다. –

+0

그건 이해가 안되는데, 왜 객체가 짧은 것과 동등한 표현을 가지고 있을까요? –

+0

난 단지 1 열을 쿼리하기 때문에. 그리고 열의 타입이 짧다 –

답변

4

형식화되지 않은 쿼리는 List<Object[]>을 반환합니다. 예외 메시지는 [Ljava.lang.Object; cannot be cast...에 대한 것입니다.

는 코드를 수정하려면 :

List<Object[]> lsMaxBatch = em.createNativeQuery(sqlMaxBatch).getResultList(); 
Iterator<Object[]> iter = lsMaxBatch.iterator(); 
while (iter.hasNext()) { 
    Object[] row = iter.next(); 
    Short batchId = (Short) row[0]; 
    ls.add(batchId); 
} 

예, 점점 List<Object[]>가 안됐다. 이를 향상 시키려면 EntityManager query creation methods 중 하나를 사용하여 TypedQuery<T>을 반환합니다.

+1

'Number'로 형 변환하고'shortValue()'를 얻는 것이 더 안전하지 않을까요? –

+0

가능합니다; 나는 그것을 고려하지 않았고/시도하지 않았다. 가능할 때마다'TypedQuery' 솔루션을 바로 사용합니다. –

+0

@GuillaumePolet 글쎄, 버그를 숨길 수도 있습니다. 365의 값을 가진 'Integer'라고 가정 해 봅시다. 아마도 오버 플로우 래핑을 원하지 않을 것입니다. 여러분은 예외를 원합니다. – yshavit

관련 문제