2012-04-04 85 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) 

你能幫忙嗎?

表通常映射到實體bean中,並且所有列都是正確的。

+0

查詢後你在做什麼?錯誤發生在您的代碼中,而不是在NH中。 – 2012-04-04 12:01:19

+0

我改變了我的問題。現在清楚嗎? – gaffcz 2012-04-04 12:03:51

回答

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

謝謝,所以我可以' t使用list()迭代它? – gaffcz 2012-04-04 11:30:20

+0

您迭代'dataList',並且您從dataList獲得的每個項目現在又是一個Object [],它應該再次迭代以訪問每個列值。 – nobeh 2012-04-04 11:31:55

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 2012-04-04 11:31:06

+0

@gaffcz不客氣,可能會發生,兩者已同時發佈或幾乎沒有時差 – 2012-04-06 15:56:15