2012-04-13 66 views
0

每当我尝试从一个jpa调用中退出的实体列表中取出实体数组时,我都会收到一个转换异常。例如...将对象数组转换为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. 
+0

你得到一个classCastException,但不打扰引用实际的异常和消息?尼斯。 – DataNucleus 2012-04-13 12:28:47

+0

嗯,我有点希望这是一种常见的事情......但我会根据您的要求发布例外情况。 – SoftwareSavant 2012-04-13 12:43:26

回答

1

你可以尝试TypedQuery获得没有明确铸造的实体清单&防止异常。

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

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

此外,更改了查询名称以更有意义的方式标识其类或结果类型。

+0

不好。我正在接受另一个例外。 BTW。我正在尝试将List SoftwareSavant 2012-04-13 13:00:28

+0

@DmainEvent是否有任何特定的原因,你正在转换列表数组。 – 2012-04-13 13:04:41

+0

这将是不正确的,我从列表转换为数组。它永远不会作为一个数组出现。我希望它。我在那里的一些代码是我试图尽可能地从这个查询中获得一系列结果的结果。 – SoftwareSavant 2012-04-13 13:06:27

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()]);   
    } 

所有异常似乎明确的权利了。 感谢您的帮助球员。

1

这不是JPA而是Java,因为它不会将Object []转换为QuickLaunch []。你不能使用Object数组而不是QuickLaunch []数组吗?