2017-10-18 62 views
0

所以 - 我是新來的一般的hiberate和Java。我已經看到一些關於這個錯誤的線索,但沒有一個符合我的情況。我有一個簡單的JPQL查詢,如下所示,它應該從函數表/實體返回函數ID和名稱。此查詢保存在我的FunctionRepository.java中Java.lang.Object;不能被轉換成<hibernate entity>

@Query("SELECT func.functionId, func.functionName" 
    + " FROM Function func") 
List<Function> findItAll(); 



-----below is my FunctionService.java------- 



public ArrayNode getAllFunctions() { 
    ArrayNode json = null; 
    try { 
     List<Function> functions = (List<Function>) functionRepository.findItAll(); 
     json = crudEntitiesToJson(functions); 
    } catch (CorruptDataException cdEx) { 
     logger.error(cdEx.getMessage()); 
    } 

    return json; 
} 

「crudEntitiesToJson」方法如下;

private ArrayNode crudEntitiesToJson(Iterable<Function> entities) throws CorruptDataException { 
    ArrayNode result = new ArrayNode(JsonNodeFactory.instance); 
    for (Function entity : entities) { 
     result.add(FunctiontoJson(entity)); 
    } 
    return result; 
} 

而這一切都是由我FunctionController.java

該項目建立和運行正常,但是當我試着打揭開序幕該查詢我得到以下錯誤端點拉開序幕

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.ge.starfish.entity.Function 

我想我很困惑,我要去哪裏錯了。

在此先感謝。

回答

1

更改爲

@Query("SELECT func FROM Function func") 
List<Function> findItAll(); 

來檢索,而不是與這兩個屬性的陣列中的所有功能。它也可以工作:

@Query("FROM Function") 
List<Function> findItAll(); 
+0

這工作!謝謝。我接受了這個答案,因爲它給了代碼完全修改的一小部分,但所有建議/迴應大致相同。 – RoflWaffle17

0

您只選擇您的實體的兩個領域:

func.functionId, func.functionName 

這意味着,查詢將返回對象數組列表,每個有兩個元素,然後您可以嘗試轉換爲功能列表對象。這是行不通的。您可以在兩者之間添加映射步驟,也可以在查詢中選擇整個實體。

0

當選擇單個列時,您不會獲得Type(函數在您的情況下)而是對象數組,如:Object[]

所以嘗試:List<Object[]> findItAll();

或者,如果獲取的所有列是好的,你可以不喜歡它Doleron的答案。

0

在JPQL中,SELECT子句定義要從數據庫中檢索哪些對象類型。相反,查詢的字段,你應該查詢整個對象是這樣的:

SELECT func FROM Function func 

您可以在The Java EE 6 Tutorial找到更多的信息和示例。

相關問題