JPA使用postgis<#>修改我的原生查询操作者

时间:2013-12-04 17:12:46

标签: java jpa eclipselink jpa-2.0 java-ee-6

为什么JPA会修改我的原生查询?

例如:

Query q = entityManager.createNativeQuery("select id from edges order by st_geomfromtext(?,4326) <#> geom_way limit 1");
q.setParameter(1, "POINT( " + longitude + " " + latitude + ")");
q.getSingleResult();

注意&lt;#&gt;运算符,用于postgis。

此代码导致错误:

javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.1.v20130918-f2b9fc5): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: No se ha especificado un valor para el parámetro 2.
Error Code: 0
Call: select id from edges order by st_geomfromtext(?,4326) <? geom_way limit 1
    bind => [null]
Query: DataReadQuery(sql="select id from edges order by st_geomfromtext(?,4326) <? geom_way limit 1")

为什么EclipseLink 2.5.1将“<#>”替换为“<?”?

由于

1 个答案:

答案 0 :(得分:0)

EclipseLink在本机SQL查询中使用#作为参数分隔符,并将此处理留给JPA支持。您可以通过将此处描述的属性http://www.eclipse.org/eclipselink/api/2.3/org/eclipse/persistence/config/QueryHints.html#PARAMETER_DELIMITER指定为某些不会使用的字符来更改所使用的默认字符,这样就不会干扰您的查询。