2013-04-30 35 views
1

非法参数异常有这样一个NamedQuery:OpenJPA的:为值对象

@NamedQuery(name = "getOpakOdeslaniForPartner", query = "select 

新com.vo.OpakOdeslaniVO(opak.pocetPokusu,opak.idSekvenceOpakovani.idOpakSekvence,opak.idSekvenceOpakovani.sekvence) 从GmOpakOdeslani OPAK,GmPrijemce prij 其中opak.idTypZpravy.idTypZpravy =:typZpravy和opak.idPrijemce = prij和prij.idPrijemceTyp.idPrijemceTyp =:typPrijemce”

值对象具有单一的构造与三个参数

有一个这样的日志(的WebLogic 11g中,HP-UX):

Caused by: <openjpa-1.1.1-SNAPSHOT-r422266:1172209 nonfatal user error> org.apache.openjpa.util.UserException: There was an error packing the projection and/or aggregate results of the query into result type "class com..vo.OpakOdeslaniVO". See the nested Throwable exception for details. 
    at org.apache.openjpa.kernel.ResultPacker.packUserType(ResultPacker.java:262) 
    at org.apache.openjpa.kernel.ResultPacker.pack(ResultPacker.java:225) 
    at org.apache.openjpa.kernel.QueryImpl$PackingResultObjectProvider.getResultObject(QueryImpl.java:1960) 
    at com..service.OpakOdeslani.getOpakOdeslaniForPartner(.java:52) 
    at sun.reflect.GeneratedMethodAccessor1516.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 

Caused by: java.lang.IllegalArgumentException 
    at sun.reflect.GeneratedConstructorAccessor747.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at org.apache.openjpa.kernel.ResultPacker.packUserType(ResultPacker.java:235) ... 114 more 

其实我觉得卡住了,因为是抛出:IllegalArgumentException没有解释的消息,我无法找到GeneratedConstructorAccessor747类的源代码。任何想法,发生了什么以及如何解决这个问题?我猜测值对象构造函数或类必定存在一些问题。

谢谢

回答

0

确保类型opak.pocetPokusu, opak.idSekvenceOpakovani.idOpakSekvence, opak.idSekvenceOpakovani.sekvence是萨姆斯类型由com.vo.OpakOdeslaniVO的构造提供。

作为一个调试点,你可以选择这些字段来确保数据被返回?

+0

我意识到,类型匹配:OpakOdeslaniVO(int pocetPokusu,long opakSekvence,String sekvence)。但是当我转到SQL时,查询没有返回任何数据。那么为什么JPA在查询返回任何行时调用构造函数? – 2013-05-01 05:42:54

+0

opak.idSekvenceOpakovani.idOpakSekvence - opak没有行,idSekvenceOpakovani返回的表有两行。但我认为,如果主表没有数据,那么细节表就不能匹配,可以吗?这是奇怪的行为,因为1)一旦某人向细节表中插入了一行,它就开始失败2)在主表和细表中都有行的另一个环境中,它运行正常。源代码两年一样。 – 2013-05-01 06:12:00

+0

这听起来像是有人在插入一些数据时可能会搞砸了吗? – Rick 2013-05-01 13:14:58