0

jpa呼び出しからプルバックするエンティティのリストからエンティティの配列を取得しようとするたびに、キャスト例外が発生します。例...

QuickLaunch[] qLaunchArr = null;
List<QuickLaunch> listQL = null;
try
{
    System.out.println("testing 1..2..3");

    //qLaunchArr
    listQL = emf.createNamedQuery("getQuickLaunch").getResultList();
    Object[] objArr = listQL.toArray();
    //System.out.println(listQL.size());
    qLaunchArr = (QuickLaunch[]) listQL.toArray();       
}
catch (Exception e)
{
    System.out.println("Bull Hockey!!!! I can't believe it's not butter!: "+e.toString());
}

[Ljava.lang.Object; incompatible with [Lcom.upmc.esdm.messaging.entities.QuickLaunch;

それは私のサーバーログにありました...(私はWIDを使用しています)そして私もこの例外を受け取ります...

commonj.connector.runtime.DataHandlerException: CWLAP0507E: The response bean class for java class  method GetAllQuickLaunchComponents cannot be created. Reason java.lang.IllegalArgumentException: argument type mismatch.
4

3 に答える 3

1

TypedQuery明示的なキャストを行わずにエンティティのリストを取得して、例外を防ぐことができます。

TypedQuery<QuickLaunch> listQL = em.createNamedQuery("QuickLaunch.getQuickLaunch", QuickLaunch.class);

List<QuickLaunch> products = listQL .getResultList();

また、クエリ名を変更して、クラスまたは結果タイプをより意味のある方法で識別できるようにしました。

于 2012-04-13T12:48:06.760 に答える
1

わかりました...私は答えを見つけたと思います。この投稿に触発されました...

https://stackoverflow.com/a/8060077/729820

私は基本的にこれを行います

try
    {
        System.out.println("testing 1..2..3");
        listQL = emf.createNamedQuery("getQuickLaunch").getResultList();
        System.out.println("What is the size of this list: number "+listQL.size());
        qLaunchArr = listQL.toArray(new QuickLaunch[listQL.size()]);         
    }

すべての例外はすぐにクリアされるようです。助けてくれてありがとう。

于 2012-04-13T13:33:10.547 に答える
1

これはJPAとは関係ありませんが、JavaはObject[]をQuickLaunch[]にキャストしないためです。QuickLaunch []配列の代わりにObject配列を使用できませんか?

于 2012-04-13T13:34:58.440 に答える