为什么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将“<#>
”替换为“<?
”?
由于
答案 0 :(得分:0)
EclipseLink在本机SQL查询中使用#作为参数分隔符,并将此处理留给JPA支持。您可以通过将此处描述的属性http://www.eclipse.org/eclipselink/api/2.3/org/eclipse/persistence/config/QueryHints.html#PARAMETER_DELIMITER指定为某些不会使用的字符来更改所使用的默认字符,这样就不会干扰您的查询。