Named parameter not found in JPA/Hibernate native SQL queries

When using named parameters in native SQL queries with Hibernate implementation of the Java Persistence API (JPA), you may run into the following error
[code lang=java]
org.springframework.dao.InvalidDataAccessApiUsageException: Parameter with that name [orderId] did not exist;
nested exception is java.lang.IllegalArgumentException: Parameter with that name [orderId] did not exist
[/code]

This happens even if the named parameter was properly set, as in the following example :

For example :
[code lang=java]
void update(EntityManager em) {
Query q = em.createNativeQuery(« SELECT * FROM orders where id = :orderId; »);
q.setParameter(« orderId », « 1234 »);
q.executeUpdate();
}
[/code]

The issue comes from the semicolon following the named parameter.

To fix it, get rid of the semi-colon, insert a space between the named parameter and the semi colon, or surround the named parameter with parenthesis.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *