相关疑难解决方法(0)

JPA/Hibernate本机查询无法识别参数

我正在使用Hibernate/JPA来执行本机PostGIS查询.这些查询的问题是它们需要的参数不是经典的X ='value'形式.

例如,以下行崩溃

 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)
Run Code Online (Sandbox Code Playgroud)

但是,以下查询有效:

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);
Run Code Online (Sandbox Code Playgroud)

(但它易于SQL注入......)

有谁知道setParameter()在这种情况下如何使用?

java orm hibernate jpa postgis

46
推荐指数
2
解决办法
9万
查看次数

标签 统计

hibernate ×1

java ×1

jpa ×1

orm ×1

postgis ×1