【发布时间】:2016-09-29 02:48:52
【问题描述】:
我在 Java 应用程序中使用 Hibernate 5.1.0。我正在使用Postgis 扩展和Oracle 数据库连接到Postgres 9.5。
我需要在我的数据库中找到与我应用 缓冲区 的给定几何相交的所有几何,例如:
Query query = session
.createQuery("select b from Block b where intersects(b.geom, buffer(:geometry, " + bufferDistance + ")) = "
+ UtilsHelper.getTrueBooleanValue(em));
query.setParameter("geometry", geom);
List<Block> blocks = query.list();
这在 Oracle 中有效,但在 Postgres 中我会收到错误:
Caused by: org.postgresql.util.PSQLException: ERROR: function st_buffer(bytea, numeric) is not unique
Hint: Could not choose a best candidate function. You might need to add explicit type casts.
Position: 243
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2270)
这是有道理的,因为它将无法在以下功能之一之间进行选择:
geometry ST_Buffer(geometry g1, float radius_of_buffer);
geography ST_Buffer(geography g1, float radius_of_buffer_in_meters);
UtilsHelper.getTrueBooleanValue(em) 将根据实体管理器获得正确的布尔值,即 Oracle 为 0/1,Postgres 为 true/false。
一个明显的解决方案是删除其中一个功能。除此之外,有什么办法可以解决这个问题吗?
【问题讨论】:
标签: java postgresql postgis hibernate-5.x