2012-04-04 3 views
0

의 차이 이유는 무엇입니까 정상이 쿼리 작업 :HQL -이 같은 쿼리

Query query = session.createQuery("from Table tab"); 

그리고이 쿼리 :

Query query = session 
    .createQuery("select tab.col1, tab.col2, tab.col3 from Table tab"); 

그리고 내가 두 쿼리로하고있어 무엇 :

dataList = query.list(); 
for (Table item : dataList) 
{ 
    System.out.println(item.getCol1(); 
} 

보고서 :

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to table.Table 
at test.TestCriteria.main(TestCriteria.java:35) 

도와 드릴까요?

테이블은 일반적으로 엔터티 빈에 매핑되며 모든 열은 정확합니다.

+0

쿼리 후 무엇을하고 있습니까? 오류가 NH 코드가 아닌 코드에서 발생합니다. –

+0

내 질문이 변경되었습니다. 지금은 분명합니까? – gaffcz

답변

3

은 내가 query에 결과가 List<Object[]> 믿습니다 :

Object[] row = (Object[]) dataList.get(i); 
Object col1Value = row[0]; 
Object col2Value = row[1]; 
Object col3Value = row[2]; 

나는 예외 추적에서 Ljava.lang.Object; 관찰이 추측이있다.

+0

감사합니다.()? – gaffcz

+0

'dataList'를 통해 반복하고'dataList'에서 얻은 각 항목은 차례대로 각 열 값에 액세스하기 위해 다시 반복해야하는'Object []'가됩니다. – nobeh

2

쿼리 결과 select tab.col1, tab.col2, tab.col3은 선택한 필드, 즉 col1, col2 & col3을 포함하는 개체 배열의 목록을 반환합니다.

다음 개체 배열에서 해당 인덱스로 필드를 추출 할 수 있습니다.

for(Object[] field : dataList){ 

    col1 = field[0]; //-- Casting accordingly 
    col2 = field[1]; 
    col3 = field[2]; 

} 
+0

고맙습니다, 이전에 비슷한 대답을 발견했지만 믿을 수 없었습니다. ( – gaffcz

+0

@ gaffcz 환영합니다. 동시에 게시되었거나 시간 차이가 거의 없을 수도 있습니다. –