Spooky Exceptions (2) – … [param_name] in the query’s selection criteria does not match any parameter name defined in the query


Die Anwendung, bei deren Entwicklung die Exception aufgetreten ist, basiert auf

  • Java 8
  • Wildfly 10.x
  • Eclipselink
  • Postgres 9.x

Folgende Exception wurde bei einer JPA Suchanfrage geworfen

08:22:42,625 ERROR [org.jboss.as.ejb3.invocation] (default task-16) WFLYEJB0034: EJB Invocation failed on 
component DeliveryAraeaFacade for method public java.util.List de.schoeso.desy.ejb.facade.ops.DeliveryAraeaFacade.findByVariousParameters(
de.schoeso.desy.ejb.entity.org.unit.UnitOfOrganisationDepot,boolean): 
javax.ejb.EJBException: javax.persistence.PersistenceException: Exception [EclipseLink-6094] (Eclipse Persistence Services - 2.6.2.v20151217-774c696): 
org.eclipse.persistence.exceptions.QueryException
Exception Description: The parameter name [mandator_id] in the query's selection criteria does not match any parameter name defined in the query.
Query: ReadObjectQuery(name="depot" referenceClass=UnitOfOrganisationDepot sql="SELECT t0.dtype, t0.care_of, ... 
WHERE (((t0.mandator_id = ?) AND (t0.unit_id = ?)) AND (((t1.mandator_id = t0.mandator_id) AND (t1.unit_id = t0.unit_id)) AND (t0.dtype = ?)))")
	at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInNoTx(CMTTxInterceptor.java:213)
	at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInNoTx(CMTTxInterceptor.java:265)
	at org.jboss.as.ejb3.tx.CMTTxInterceptor.notSupported(CMTTxInterceptor.java:313)
	at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:237)

In diesem Beispiel wurde eine JPA Query für die Klasse DeliveryAraea abgesetzt. Ursache für den Fehler ist, dass DeliveryAraea auf ein Objekt vom Typ Depot verweist und in den Join Columns zwei Attribute angegeben wurden. Das Attribut mandator_id wurde allerdings versehentlich mit

, insertable = false, updatable = false

versehen, ohne dass dieses Attribut an anderer Stelle geschrieben wurde. Hierdurch wird von dem JPA Provider der Parameter bei der Erstellung der SQL Abfrage nicht gefunden. Wird diese falsche Konfiguration gelöscht, funktioniert die Anfrage erwartungsgemäß.

Du hast Fragen oder Anmerkungen? Kontakt: arndt@schoenb.de

,