2017-10-18 7 views
0

にキャストすることはできません。私はこのエラーに関していくつかのスレッドを見たことがありますが、私の状況に合うものはありません。私は、以下のように単純なJPQLクエリを持っています。これは、関数テーブル/エンティティから関数IDと名前を取り戻す必要があります。このクエリは、私のFunctionRepository.javaJava.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 

私はどこが間違っているのか混乱していると思います。

ありがとうございます。あなたはその後、機能のリストにキャストしようとする2つの要素で

意味
func.functionId, func.functionName 

は、クエリがオブジェクト配列のリストを返します、それぞれ:あなただけのエンティティの二つのフィールドを選択している

答えて

1

の変更ではなく、二つの属性を持つ配列のすべての機能を取得します。

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

これは機能しました。ありがとう。私はコードの完全に変更されたビットを与えたので、私はこの答えを受け入れたが、すべての提案/応答はほぼ同じです。 – RoflWaffle17

0

オブジェクト。それは動作しません。その間にマッピングステップを追加するか、クエリ内のエンティティ全体を選択します。 Object[]:個々の列を選択するとき

0

あなたは次のように、タイプ(あなたのケースでは機能)が、オブジェクトの配列を得ることはありません。

ので、試してみてください。List<Object[]> findItAll();

またはすべての列を取得すると、あなたがDoleronの答えのようにそれを行うことができますokです場合。

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

ため

0

JPQLでは、SELECT句はデータベースから取得するオブジェクトタイプを定義します。代わりに、フィールドをクエリの、あなたは、このような全体のオブジェクトを照会する必要があります

SELECT func FROM Function func 

あなたがThe Java EE 6 Tutorialでより多くの情報と例を見つけることができます。

関連する問題