Community
Participate
Working Groups
Build Identifier: 20100413 Converting following JPQL into CriteriaQuery as shown below throws ArrayOutofBoundException // Select Distinct o FROM Order o where coalesce (o.customer.name, o.customer.id)= 'Stephen J. Caruso' ----[ Begin code extract ]---------- boolean pass = false; EntityManager em = getEntityManager(); CriteriaBuilder cbuilder = em.getCriteriaBuilder(); Metamodel mm = em.getMetamodel(); EntityTransaction et = getEntityTransaction(); et.begin(); CriteriaQuery<Order> cquery = cbuilder.createQuery(Order.class); if (cquery != null) { TLogger.log("Obtained Non-null Criteria Query"); Root<Order> order = cquery.from(Order.class); //Get Metamodel from Root EntityType<Order> Order_ = order.getModel(); EntityType<Customer> Customer_ = mm.entity(com.sun.ts.tests.ejb30.persistence.criteriaapi.util.Customer.class); TLogger.log("Usage of Coalesce in Criteriabuilder"); cquery.select(order); cquery.where(cbuilder.equal( cbuilder.coalesce( order.get(Order_.getSingularAttribute("customer", Customer.class)).get(Customer_.getSingularAttribute("name", String.class)), order.get(Order_.getSingularAttribute("customer", Customer.class)).get(Customer_.getSingularAttribute("id", String.class))), "Stephen J. Caruso")); cquery.distinct(true); TypedQuery<Order> tq = em.createQuery(cquery); List<Order> result = tq.getResultList(); ... ----[ End code extract ]---------- ----[ Begin Exception message ]------------- [javatest.batch] Usage of Coalesce in Criteriabuilder [javatest.batch] [EL Warning]: 2010-04-13 18:45:26.193--UnitOfWork(118331953)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.1.0.v20100413-r6957): org.eclipse.persistence.exceptions.DatabaseException [javatest.batch] Internal Exception: java.sql.SQLException: The exception 'java.lang.ArrayIndexOutOfBoundsException: -1' was thrown while evaluating an expression. [javatest.batch] Error Code: -1 [javatest.batch] Call: SELECT DISTINCT t1.ID, t1.TOTALPRICE, t1.FK4_FOR_CUSTOMER_TABLE, t1.FK0_FOR_LINEITEM_TABLE FROM CUSTOMER_TABLE t0, ORDER_TABLE t1 WHERE ((COALESCE(t0.NAME,t0.ID ) = ?) AND (t0.ID = t1.FK4_FOR_CUSTOMER_TABLE)) [javatest.batch] bind => [Stephen J. Caruso] [javatest.batch] Query: ReadAllQuery(referenceClass=Order sql="SELECT DISTINCT t1.ID, t1.TOTALPRICE, t1.FK4_FOR_CUSTOMER_TABLE, t1.FK0_FOR_LINEITEM_TABLE FROM CUSTOMER_TABLE t0, ORDER_TABLE t1 WHERE ((COALESCE(t0.NAME,t0.ID ) = ?) AND (t0.ID = t1.FK4_FOR_CUSTOMER_TABLE))") [javatest.batch] 04-13-2010 18:45:26: ERROR: Exception at: [javatest.batch] 04-13-2010 18:45:26: ERROR: Local Exception Stack: [javatest.batch] Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.1.0.v20100413-r6957): org.eclipse.persistence.exceptions.DatabaseException [javatest.batch] Internal Exception: java.sql.SQLException: The exception 'java.lang.ArrayIndexOutOfBoundsException: -1' was thrown while evaluating an expression. [javatest.batch] Error Code: -1 [javatest.batch] Call: SELECT DISTINCT t1.ID, t1.TOTALPRICE, t1.FK4_FOR_CUSTOMER_TABLE, t1.FK0_FOR_LINEITEM_TABLE FROM CUSTOMER_TABLE t0, ORDER_TABLE t1 WHERE ((COALESCE(t0.NAME,t0.ID ) = ?) AND (t0.ID = t1.FK4_FOR_CUSTOMER_TABLE)) [javatest.batch] bind => [Stephen J. Caruso] [javatest.batch] Query: ReadAllQuery(referenceClass=Order sql="SELECT DISTINCT t1.ID, t1.TOTALPRICE, t1.FK4_FOR_CUSTOMER_TABLE, t1.FK0_FOR_LINEITEM_TABLE FROM CUSTOMER_TABLE t0, ORDER_TABLE t1 WHERE ((COALESCE(t0.NAME,t0.ID ) = ?) AND (t0.ID = t1.FK4_FOR_CUSTOMER_TABLE))") [javatest.batch] at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333) [javatest.batch] at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:687) [javatest.batch] at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:530) [javatest.batch] at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:529) [javatest.batch] at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:206) [javatest.batch] at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:192) [javatest.batch] at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeSelectCall(DatasourceCallQueryMechanism.java:263) [javatest.batch] at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.selectAllRows(DatasourceCallQueryMechanism.java:619) [javatest.batch] at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRowsFromTable(ExpressionQueryMechanism.java:2538) [javatest.batch] at org.eclipse.persistence.internal.queries.ExpressionQueryMechanism.selectAllRows(ExpressionQueryMechanism.java:2497) [javatest.batch] at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:404) [javatest.batch] at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:989) [javatest.batch] at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:730) [javatest.batch] at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:949) [javatest.batch] at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:380) [javatest.batch] at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1013) [javatest.batch] at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2914) [javatest.batch] at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1225) [javatest.batch] at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1207) [javatest.batch] at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.executeQuery(UnitOfWorkImpl.java:1856) [javatest.batch] at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1181) [javatest.batch] at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:460) [javatest.batch] at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getResultList(EJBQueryImpl.java:687) [javatest.batch] at com.sun.ts.tests.ejb30.persistence.criteriaapi.criteriabuilder.Client.coalesce(Client.java:4229) [javatest.batch] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [javatest.batch] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [javatest.batch] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [javatest.batch] at java.lang.reflect.Method.invoke(Method.java:597) [javatest.batch] at com.sun.ts.lib.harness.EETest.run(EETest.java:495) [javatest.batch] at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:113) [javatest.batch] at com.sun.ts.tests.common.vehicle.EmptyVehicleRunner.run(EmptyVehicleRunner.java:30) [javatest.batch] at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:102) [javatest.batch] at com.sun.ts.lib.harness.EETest.getPropsReady(EETest.java:392) [javatest.batch] at com.sun.ts.lib.harness.ServiceEETest.run(ServiceEETest.java:210) [javatest.batch] at com.sun.ts.lib.harness.EETest.run(EETest.java:204) [javatest.batch] at com.sun.ts.tests.common.vehicle.VehicleClient.main(VehicleClient.java:27) [javatest.batch] Caused by: java.sql.SQLException: The exception 'java.lang.ArrayIndexOutOfBoundsException: -1' was thrown while evaluating an expression. [javatest.batch] at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unknown Source) [javatest.batch] at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source) [javatest.batch] at org.apache.derby.client.am.PreparedStatement.executeQuery(Unknown Source) [javatest.batch] at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeSelect(DatabaseAccessor.java:892) [javatest.batch] at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:602) [javatest.batch] ... 34 more [javatest.batch] Caused by: org.apache.derby.client.am.SqlException: The exception 'java.lang.ArrayIndexOutOfBoundsException: -1' was thrown while evaluating an expression. [javatest.batch] at org.apache.derby.client.am.Statement.completeSqlca(Unknown Source) [javatest.batch] at org.apache.derby.client.am.Statement.completeOpenQuery(Unknown Source) [javatest.batch] at org.apache.derby.client.net.NetStatementReply.parseOpenQueryFailure(Unknown Source) [javatest.batch] at org.apache.derby.client.net.NetStatementReply.parseOPNQRYreply(Unknown Source) [javatest.batch] at org.apache.derby.client.net.NetStatementReply.readOpenQuery(Unknown Source) [javatest.batch] at org.apache.derby.client.net.StatementReply.readOpenQuery(Unknown Source) [javatest.batch] at org.apache.derby.client.net.NetStatement.readOpenQuery_(Unknown Source) [javatest.batch] at org.apache.derby.client.am.Statement.readOpenQuery(Unknown Source) [javatest.batch] at org.apache.derby.client.am.PreparedStatement.flowExecute(Unknown Source) [javatest.batch] at org.apache.derby.client.am.PreparedStatement.executeQueryX(Unknown Source) [javatest.batch] ... 37 more [javatest.batch] Caused by: org.apache.derby.client.am.SqlException: Java exception: '-1: java.lang.ArrayIndexOutOfBoundsException'. [javatest.batch] ... 47 more [javatest.batch] Reproducible: Always Steps to Reproduce: 1. See bug description to reproduce this.
Setting target and priority. See the following page for the meanings of these settings: http://wiki.eclipse.org/EclipseLink/Development/Bugs/Guidelines
The Eclipselink project has moved to Github: https://github.com/eclipse-ee4j/eclipselink