3 回答
TA贡献1827条经验 获得超7个赞
未为本机查询定义使用命名参数。根据JPA规范(第3.6.3节“ 命名参数”):
命名参数遵循第4.4.1节中定义的标识符规则。命名参数的使用适用于Java Persistence查询语言,而不是为本机查询定义的。 仅位置参数绑定可用于本机查询。
因此,请尝试以下操作:
String queryString = "select * from Cell c where ST_DWithin(c.shape, SetSRID(ST_GeomFromEWKT('POINT(?1 ?2)'),4326), 0.1)";
Query query = Cell.em().createNativeQuery(queryString, Cell.class);
query.setParameter(1, longitude);
query.setParameter(2, latitude);
请注意,在JPA> = 2.0中,可以在本机查询中使用命名参数。
TA贡献1936条经验 获得超6个赞
也许你可以更换
'POINT(:lon :lat)'
与
'POINT(' || :lon || ' ' || :lat || ')'
这样,参数位于常量字符串之外,并且应由查询解析器识别。
TA贡献1821条经验 获得超6个赞
我遇到了类似的问题,发现可以在本机查询中使用问号设置参数。尝试这个:
String queryString = "select * from Cell c where ST_DWithin(c.shape, SetSRID(ST_GeomFromEWKT('POINT(? ?)'),4326), 0.1)";
Query query = Cell.em().createNativeQuery(queryString, Cell.class);
query.setParameter(1, longitude);
query.setParameter(2, latitude);
添加回答
举报