I'm facing an issue when using a Named Query with a class that uses generics.
Without using generics, a call to the Named Query works perfect. When using
generics, a call to the Named Query results in a ArgumentException.

I'm using version 1.2.2 of OpenJPA. I would be very pleased if someone could
help me to solve this issue. 

A description of both scenarios:

Without generics
The 'VATRResponse' class has a ManyToOne relationship with the 'VATRMessage'
class. The 'VATRResponse' class has a named query
'VATRResponse.findResponsesByMsgId'. When calling this query - by using the
'findResponsesForMessageId' method - without using generics, I'm getting a
correct result. So far so good :o)

[code]
@Entity
@NamedQueries( {
        @NamedQuery(
                        name = "VATRResponse.findResponsesByMsgId",
                        query = "select r from VATRResponse r where 
r.message.id=:msgId")}
)
public class VATRResponse {
        @ManyToOne
        public VATRMessage message;
}
[/code]

[code]
@Entity
public class VATRMessage extends ViesMessage {}
[/code]

[code]
@Override
@SuppressWarnings("unchecked")
public List<VATRResponse> findResponsesForMessageId(Long msgId) {
        Query query =
entityManager.createNamedQuery("VATRResponse.findResponsesByMsgId");
        query.setParameter("msgId",msgId);
        List rply = query.getResultList();
        return rply;
}
[/code]


With generics

Based on the above code, I've created a generic 'ViesResponse' class. This
class has the ManyToOne relationship to a generic MSG. The
'VATRResponse.findResponsesByMsgId' named query remains on the
'VATRResponse' class. 

When calling the same 'findResponsesForMessageId' method, I'm getting an
ArgumentException (see below for the complete stack trace).

[code]
@MappedSuperclass
public abstract class ViesResponse<MSG extends ViesMessage> extends
IdentityObject {
        @ManyToOne
        public MSG message;
}
[/code]

[code]
@Entity
@NamedQueries( {
        @NamedQuery(
                        name = "VATRResponse.findResponsesByMsgId",
                        query = "select r from VATRResponse r where 
r.message.id=:msgId")}
)
[/code]

[code]
public class VATRResponse extends ViesResponse<VATRMessage> {
}
[/code]

[stacktrace]
ATTENTION: A system exception occurred during an invocation on EJB
VATRManagerImpl method public java.util.List
be.minfin.fgov.jpa.proto3.business.VATRManagerImpl.findResponsesForMessageId(java.lang.Long)
javax.ejb.EJBException
        at
com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5030)
        at
com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:4928)
        at
com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4716)
        at
com.sun.ejb.containers.StatefulSessionContainer.postInvokeTx(StatefulSessionContainer.java:1626)
        at 
com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1941)
        at 
com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1892)
        at
com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:198)
        at
com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:84)
        at $Proxy80.findResponsesForMessageId(Unknown Source)
        at
be.minfin.fgov.jpa.proto3.VATRManagerTest.receiveMessage(VATRManagerTest.java:15)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
        at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
        at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
        at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
        at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
        at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
        at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
        at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
        at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
        at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
        at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
        at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
        at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: <openjpa-1.2.2-r422266:898935 nonfatal user error>
org.apache.openjpa.persistence.ArgumentException: 0
        at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:857)
        at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:779)
        at
org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:525)
        at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:254)
        at
org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:294)
        at
be.minfin.fgov.jpa.proto3.business.VATRManagerImpl.findResponsesForMessageId(VATRManagerImpl.java:24)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at
org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
        at
org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
        at
com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseContainer.java:4010)
        at
com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5183)
        at 
com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5163)
        at
com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:190)
        ... 27 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
        at org.apache.openjpa.jdbc.kernel.exps.PCPath.appendTo(PCPath.java:721)
        at
org.apache.openjpa.jdbc.kernel.exps.EqualExpression.appendTo(EqualExpression.java:71)
        at
org.apache.openjpa.jdbc.kernel.exps.CompareEqualExpression.appendTo(CompareEqualExpression.java:98)
        at
org.apache.openjpa.jdbc.kernel.exps.SelectConstructor.buildWhere(SelectConstructor.java:240)
        at
org.apache.openjpa.jdbc.kernel.exps.SelectConstructor.evaluate(SelectConstructor.java:81)
        at
org.apache.openjpa.jdbc.kernel.JDBCStoreQuery.createWhereSelects(JDBCStoreQuery.java:339)
        at
org.apache.openjpa.jdbc.kernel.JDBCStoreQuery.executeQuery(JDBCStoreQuery.java:179)
        at
org.apache.openjpa.kernel.ExpressionStoreQuery$DataStoreExecutor.executeQuery(ExpressionStoreQuery.java:681)
        at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:988)
        at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:848)
[/stacktrace]
-- 
View this message in context: 
http://openjpa.208410.n2.nabble.com/ArgumentException-when-using-generics-tp5073975p5073975.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Reply via email to