JPA / Hibernate Native Queries erkennen keine Parameter

Ich verwende Hibernate / JPA, um native PostGIS-Abfragen auszuführen. Das Problem bei diesen Abfragen ist, dass sie Parameter benötigen, die nicht die klassische X = 'value'-Form haben.

Zum Beispiel stürzen die folgenden Zeilen ab

 String queryString = "select * from Cell c where ST_DWithin(c.shape, SetSRID(ST_GeomFromEWKT('POINT(:lon :lat)'),4326), 0.1)";
  Query query = Cell.em().createNativeQuery(queryString, Cell.class);
  query.setParameter("lon", longitude);
  query.setParameter("lat", latitude);

play.exceptions.JavaExecutionException: org.hibernate.QueryParameterException: could not locate named parameter [lon]
 at play.mvc.ActionInvoker.invoke(ActionInvoker.java:259)
 at Invocation.HTTP Request(Play!)
Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryParameterException: could not locate named parameter [lon]
 at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:358)

Die folgende Abfrage funktioniert jedoch:

String queryString = String.format("select * from Cell c where ST_DWithin(c.shape, SetSRID(ST_GeomFromEWKT('POINT(%f %f)'),4326), 0.1)", longitude, latitude);
Query query = Cell.em().createNativeQuery(queryString, Cell.class);

(aber es ist SQL-Injection-anfällig ...)

Weiß jemand, wie man @ benutzsetParameter() in diesem Fall

Antworten auf die Frage(14)

Ihre Antwort auf die Frage