In our attempt to switch to JPQL from Jakarta Persistence 3.2, we sent the following JPQL DELETE query to EclipseLink EntityManager.createQuery, DELETE FROM Product WHERE this.name LIKE ?1, and it seems to be losing this.name from it,
[6/26/24, 9:49:58:186 CDT] 00000055 id=15ef1519 io.openliberty.data.internal.persistence.RepositoryImpl > invoke MultiRepository.destroy Entry
TestFromClauseIdentifiesEntity-%
[6/26/24, 9:49:58:186 CDT] 00000055 id=15ef1519 io.openliberty.data.internal.persistence.RepositoryImpl 3 QueryInfo@4c3f8c74 long destroy(String) DELETE FROM Product WHERE this.name LIKE ?1 [1 positional params]
[6/26/24, 9:49:58:186 CDT] 00000055 id=3d2bc4d0 enliberty.data.internal.persistence.service.DBStoreEMBuilder > createEntityManager Entry
[6/26/24, 9:49:58:186 CDT] 00000055 id=1d8c4485 om.ibm.wsspi.persistence.internal.PersistenceServiceUnitImpl > createEntityManager Entry
[6/26/24, 9:49:58:186 CDT] 00000055 id=1d8c4485 om.ibm.wsspi.persistence.internal.PersistenceServiceUnitImpl < createEntityManager Exit
org.eclipse.persistence.internal.jpa.EntityManagerImpl@46f50a38
[6/26/24, 9:49:58:186 CDT] 00000055 id=3d2bc4d0 enliberty.data.internal.persistence.service.DBStoreEMBuilder < createEntityManager Exit
org.eclipse.persistence.internal.jpa.EntityManagerImpl@46f50a38
[6/26/24, 9:49:58:187 CDT] 00000055 id=4c3f8c74 io.openliberty.data.internal.persistence.QueryInfo > setParameters Entry
EJBQueryImpl(DeleteAllQuery(referenceClass=Product sql="DELETE FROM WLPProduct WHERE LIKE ?"))
TestFromClauseIdentifiesEntity-%
[6/26/24, 9:49:58:187 CDT] 00000055 id=4c3f8c74 io.openliberty.data.internal.persistence.QueryInfo 3 set ?1 String
[6/26/24, 9:49:58:187 CDT] 00000055 id=4c3f8c74 io.openliberty.data.internal.persistence.QueryInfo < setParameters Exit
[6/26/24, 9:49:58:187 CDT] 00000055 id=00000000 eclipselink.ps.connection 3 client acquired: 626983658
[6/26/24, 9:49:58:187 CDT] 00000055 id=00000000 eclipselink.ps.transaction 3 TX binding to tx mgr, status=STATUS_ACTIVE
[6/26/24, 9:49:58:187 CDT] 00000055 id=00000000 eclipselink.ps.transaction 3 acquire unit of work: 168338348
[6/26/24, 9:49:58:187 CDT] 00000055 id=00000000 eclipselink.ps.transaction 3 begin unit of work flush
[6/26/24, 9:49:58:187 CDT] 00000055 id=00000000 eclipselink.ps.transaction 3 end unit of work flush
[6/26/24, 9:49:58:187 CDT] 00000055 id=00000000 eclipselink.ps.query 3 Execute query DeleteAllQuery(referenceClass=Product sql="DELETE FROM WLPProduct WHERE LIKE ?")
[6/26/24, 9:49:58:187 CDT] 00000055 id=00000000 eclipselink.ps.transaction 3 TX beginTransaction, status=STATUS_ACTIVE
[6/26/24, 9:49:58:187 CDT] 00000055 id=00000000 eclipselink.ps.connection 3 Connection acquired from connection pool [default].
[6/26/24, 9:49:58:187 CDT] 00000055 id=00000000 eclipselink.ps.connection 3 reconnecting to external connection pool
[6/26/24, 9:49:58:187 CDT] 00000055 id=00000000 eclipselink.ps.sql 3 DELETE FROM WLPProduct WHERE LIKE ?
bind => [1 parameter bound]
[6/26/24, 9:49:58:190 CDT] 00000055 id=00000000 eclipselink.ps.sql 3 VALUES(1)
[6/26/24, 9:49:58:190 CDT] 00000055 id=00000000 eclipselink.ps 3 CWWKD0291W: Exception [EclipseLink-4002] (Eclipse Persistence Services - 5.0.0-B02.v202404111748): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "LIKE" at line 1, column 31.
Error Code: 20000
Call: DELETE FROM WLPProduct WHERE LIKE ?
bind => [1 parameter bound]
Query: DeleteAllQuery(referenceClass=Product sql="DELETE FROM WLPProduct WHERE LIKE ?")
[6/26/24, 9:49:58:190 CDT] 00000055 id=00000000 eclipselink.ps 3 throwable
Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 5.0.0-B02.v202404111748): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "LIKE" at line 1, column 31.
Error Code: 20000
Call: DELETE FROM WLPProduct WHERE LIKE ?
bind => [1 parameter bound]
Query: DeleteAllQuery(referenceClass=Product sql="DELETE FROM WLPProduct WHERE LIKE ?")
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:346)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:702)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:569)
at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:2046)
at org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:322)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:282)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:268)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.deleteAll(DatasourceCallQueryMechanism.java:167)
at org.eclipse.persistence.queries.DeleteAllQuery.executeDatabaseQuery(DeleteAllQuery.java:210)
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:934)
at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:833)
at org.eclipse.persistence.queries.ModifyAllQuery.executeInUnitOfWork(ModifyAllQuery.java:153)
at org.eclipse.persistence.queries.DeleteAllQuery.executeInUnitOfWork(DeleteAllQuery.java:132)
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:3015)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1841)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1823)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1788)
at org.eclipse.persistence.internal.jpa.QueryImpl.executeUpdate(QueryImpl.java:303)
at io.openliberty.data.internal.persistence.RepositoryImpl.invoke(RepositoryImpl.java:1083)
at jdk.proxy14/jdk.proxy14.$Proxy64.destroy(Unknown Source)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.jboss.weld.bean.proxy.AbstractBeanInstance.invoke(AbstractBeanInstance.java:38)
at org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:109)
at test.jakarta.data.web.MultiRepository$1947407397$Proxy$_$$_WeldClientProxy.destroy(Unknown Source)
at test.jakarta.data.web.DataTestServlet.testFromClauseIdentifiesEntity(DataTestServlet.java:1663)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at componenttest.app.FATServlet.doGet(FATServlet.java:74)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:633)
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:723)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1266)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:754)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:451)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1362)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1078)
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:77)
at com.ibm.ws.webcontainer40.servlet.CacheServletWrapper40.handleRequest(CacheServletWrapper40.java:87)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:978)
at com.ibm.ws.webcontainer.osgi.DynamicVirtualHost$2.run(DynamicVirtualHost.java:293)
at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink$TaskWrapper.run(HttpDispatcherLink.java:1260)
at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.wrapHandlerAndExecute(HttpDispatcherLink.java:476)
at com.ibm.ws.http.dispatcher.internal.channel.HttpDispatcherLink.ready(HttpDispatcherLink.java:435)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:569)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.handleNewRequest(HttpInboundLink.java:503)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.processRequest(HttpInboundLink.java:363)
at com.ibm.ws.http.channel.internal.inbound.HttpInboundLink.ready(HttpInboundLink.java:330)
at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:169)
at com.ibm.ws.tcpchannel.internal.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:77)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager.requestComplete(WorkQueueManager.java:516)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager.attemptIO(WorkQueueManager.java:586)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager.workerRun(WorkQueueManager.java:970)
at com.ibm.ws.tcpchannel.internal.WorkQueueManager$Worker.run(WorkQueueManager.java:1059)
at com.ibm.ws.threading.internal.ExecutorServiceImpl$RunnableWrapper.run(ExecutorServiceImpl.java:280)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "LIKE" at line 1, column 31.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedPreparedStatement.<init>(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedPreparedStatement42.<init>(Unknown Source)
at org.apache.derby.jdbc.Driver42.newEmbedPreparedStatement(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source)
at org.apache.derby.impl.jdbc.EmbedConnection.prepareStatement(Unknown Source)
at org.apache.derby.iapi.jdbc.BrokeredConnection.prepareStatement(Unknown Source)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:2237)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:2202)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1751)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1698)
at org.eclipse.persistence.internal.databaseaccess.DatabaseCall.prepareStatement(DatabaseCall.java:766)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:630)
... 55 more
Caused by: ERROR 42X01: Syntax error: Encountered "LIKE" at line 1, column 31.
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
at org.apache.derby.impl.sql.compile.ParserImpl.parseStatementOrSearchCondition(Unknown Source)
at org.apache.derby.impl.sql.compile.ParserImpl.parseStatement(Unknown Source)
at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown Source)
... 67 more
Additionally, I temporarily added a System.out immediately before invoking EntityManager.createQuery(jpql) to confirm that the JPQL we are sending to it really does include this.name.
In our attempt to switch to JPQL from Jakarta Persistence 3.2, we sent the following JPQL DELETE query to EclipseLink EntityManager.createQuery,
DELETE FROM Product WHERE this.name LIKE ?1
, and it seems to be losingthis.name
from it,Additionally, I temporarily added a System.out immediately before invoking EntityManager.createQuery(jpql) to confirm that the JPQL we are sending to it really does include
this.name
.