2017-08-09 51 views
1

我有這種奇怪的行爲與Hibernate SQLQuery.list()方法。Hibernate SQLQuery列表方法返回對象而不是對象數組

以下是問題的描述:

我有一個從數據庫中檢索只有單個列(組)一個SQL SELECT查詢(即select group from peopleGroup where groupid = 10) 而且我recieving的結果上述列表中的對象陣列
即列表,

SQLQuery hQuery = session.createSQLQuery("select group from peopleGroup where groupid = 10"); 
List<Object[]> result = (List<Object[]>)hQuery.list(); 

理想情況下,結果所包含的對象陣列的列表,但是當我檢查,結果的第0索引包含字符串對象代替Ob的ject數組。
但是如果我使用一個以上的列假設查詢我能看到結果作爲對象數組即是第0指數的SELECT子句中的兩列,Object[2]={"group","groupid"};

如何獲得對象數組,即使我只有一個列在查詢的select子句中提到?

+2

你不會..... –

回答

1

Docs狀態:

名單列表()

返回查詢結果列表。如果查詢每行包含多個 結果,則會在Object []的實例中返回結果。

自己轉換它,像這樣。

List<Object[]> l = new ArrayList<>(); 
for(Object o : query.list()) { 
    Object[] arr = {o}; 
    l.add(arr); 
} 
+0

我現在理解文檔,但是我有任何選項來實現我的目標,雖然我在select子句中有單列,但我需要將返回的對象放在對象數組中? – VRaj

+0

自己轉換。添加一個例子。 –

0

,你可以創建一個像下面的代碼

public class QueryMapper { 
    private String group; 
    //setter and getter 
    } 

一個對象映射,與你必須改變喜歡你的代碼下面

SQLQuery hQuery = session.createSQLQuery("select group from peopleGroup where groupid = 10"); 
List<Object[]> result = (List<Object[]>)hQuery.list(); 

List<QueryMapper> list = new ArrayList<QueryMapper>(); 

     for(Object[] object: result){ 
      QueryMapper queryMapper = new QueryMapper(); 
      if(object[0]!=null){ 
       queryMapper.setGroup((String)object[2]); 
      } 
      list.add(queryMapper); 
     } 
0

所有我想要的是修復ClassCastException異常這在將result.get(0)賦值給容器期間被捕獲,即container = result.get(0);

由於所提到的list()方法返回的值在查詢的select子句中包含單個列的情況下包含對象,因此我將不允許從某個對象轉換爲Object [](Object array)。 相反,我已經嘗試了變通像下面

已經存在的代碼

SQLQuery hQuery = session.createSQLQuery("select group from peopleGroup where groupid = 10"); 
List<Object[]> result = (List<Object[]>)hQuery.list(); 
Object[] container = result.get(0); 

現在我已經把情況如下圖所示,以決定如何值分配給Object[]

SQLQuery hQuery = session.createSQLQuery("select group from peopleGroup where groupid = 10"); 
List<Object[]> result = (List<Object[]>)hQuery.list(); 
Object[] container = null; 
if(result.get(0) instanceof Object[]) 
    container = result.get(0); 
else { 
    container = new Object[1]; 
    container[0] = result.get(0); 
     } 

上述解決方案似乎在我的情況下工作!

相關問題