2012-04-04 22 views
0

の違いはなぜ通常、この問合せ作業:HQL - 2つの同じクエリ

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で起こっています。 –

+0

私は質問を変更しました。今は明らかですか? – gaffcz

答えて

3

、結果は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はリストを()を使用して、それを反復処理するには? – gaffcz

+0

あなたは 'dataList'を反復し、dataList''から取得した各項目は順番に 'オブジェクト今ある[]'それは、各列の値にアクセスするために何度も繰り返し反復されなければなりません。 – nobeh

2

クエリselect tab.col1, tab.col2, tab.col3の結果は、選択されたフィールド、すなわちcol1、col2 & col3を含むオブジェクト配列のリストを返します。

そして、オブジェクト配列から、あなたはそれらのインデックスでフィールドを抽出することができます。私はquery信じ

for(Object[] field : dataList){ 

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

} 
+0

ありがとう、私は前に似たような答えを見つけましたが、私はそれを信じていませんでした:( – gaffcz

+0

@ gaffczあなたは歓迎です。両方が同時に投稿されたか少しの時間差があるかもしれません。 –

関連する問題