【发布时间】:2020-09-30 19:46:39
【问题描述】:
我在 JpaRepository 中有查询,它们使用 ST_MakeEnvelope、ST_DWithin 等 Postgis 函数。这是用于生产代码的。
我还想为 H2gis 测试这些查询,但这些功能将无法工作。
如何使用休眠空间来弥补这一差距?
我的查询如下:
@Query(value = "SELECT * FROM Feature f WHERE geometry && ST_MakeEnvelope(:west, :south, :east, :north, :srid)", nativeQuery = true)
如何让它也与 h2 gis 一起使用?
所以我创建了这个查询:
@Query(value = "SELECT * FROM Feature f where dwithin(f.geometry, :centre, :range)", nativeQuery = true)
但这会引发错误:
Caused by: org.h2.jdbc.JdbcSQLException: Function "DWITHIN" not found;
我有以下依赖项:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.197</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.orbisgis</groupId>
<artifactId>h2gis-functions</artifactId>
<version>1.3.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-spatial</artifactId>
<version>5.4.17.Final</version>
</dependency>
【问题讨论】:
-
你在为空间初始化 h2 db 吗?
-
是的,我的保存操作运行良好,读取也正常。只有当读取查询使用了空间函数时才会出现问题。
-
你能用
ST_DWithin代替dwithin试试 -
试过了。这也会引发同样的错误。
-
我的意思是 h2 gis 扩展功能已初始化?像 CREATE ALIAS IF NOT EXISTS H2GIS_SPATIAL FOR "org.h2gis.functions.factory.H2GISFunctions.load";调用 H2GIS_SPATIAL();