Hibernate-spatial 5.4.22, hibernate.dialect = org.hibernate.spatial.dialect.postgis.PostgisDialect
一个非常简单的查询:
import org.locationtech.jts.geom.Geometry;
...
@Query(value = "Select s from #{#entityName} s where within(s.shape, :bounds )= true")
public List<SiteModel> findWithinBounds(Geometry bounds);
边界几何通过以下方式生成:
GeometryFactory gf = new GeometryFactory();
Polygon bounds = gf.createPolygon(sc);
bounds.setSRID(4326);
return newSiteService.findWithinBounds(bounds);
但它产生误差
select
sitemodel0_.site_id as site_id1_1_,
sitemodel0_.accuracy as accuracy2_1_,
sitemodel0_.comment as comment3_1_,
sitemodel0_.country_code as country_4_1_,
sitemodel0_.directions as directio5_1_,
sitemodel0_.flag as flag6_1_,
sitemodel0_.height as height7_1_,
sitemodel0_.h_accuracy as h_accura8_1_,
sitemodel0_.h_method_id as h_method9_1_,
sitemodel0_.latitude as latitud10_1_,
sitemodel0_.longitude as longitu11_1_,
sitemodel0_.method_id as method_12_1_,
sitemodel0_.orig_coord as orig_co13_1_,
sitemodel0_.orig_system_id as orig_sy14_1_,
sitemodel0_.owner_id as owner_i15_1_,
sitemodel0_.shape as shape16_1_,
sitemodel0_.site_name as site_na17_1_
from
sc.site_proposed sitemodel0_
where
within(sitemodel0_.shape, ?)=true
WARN : SQL Error: 0, SQLState: 42883
ERROR: ERROR: function within(geometry, bytea) does not exist
所以似乎捡到了postgis形状字段是几何学的。(它是postgis几何类型),但无法理解JTS几何对象。我看到很多关于反面的问题,但不是这个错误。
< code>PostgisDialect已经被弃用很长时间了。您应该为Postgis使用一种较新的方言,例如< code>PostgisPG95Dialect。您应该在SQL中看到一个< code>st_within()函数,而不是< code>within()。
感谢@Karel Maesen的提示,我确实让它工作了。我需要把
hibernate.dialect = org.hibernate.spatial.dialect.postgis.PostgisDialect
spring.jpa.properties.hibernate.dialect = org.hibernate.spatial.dialect.postgis.PostgisPG95Dialect
进入属性。完成后,带有和dwithin的空间查询都可以工作。
@Query(value = "Select s from #{#entityName} s where within(s.shape, :bounds )= true")
public List<SiteModel> findWithinBounds(Geometry bounds);
@Query(value = "Select s from #{#entityName} s where dwithin(s.shape, :point, :distance)= true")
public List<SiteModel> findCloseTo(Geometry point, double distance);
我正在尝试使用postgis设置一个带有hibernate空间的项目。按照hibernate空间4.0-M1的教程,我首先遇到了无法找到依赖postgis-jdbc-1.5.3.jar的问题。就像有人在这里建议的那样,我使用了1.5.2版和教程编译。 但是如果我尝试运行它,我会出错。我将Hibernate的调试级别设置为调试und时偶然发现了以下问题: 错误是德语,但意味着“几何”类型不存在。 如
我遇到了一个最奇怪的问题,我就是无法理解。我的网络api使用Spring Boot和postgresql/postgis,在尝试从数据库中读取几何图形时出现了不一致的错误。我已经使用这段代码很多很多年了(当然偶尔会进行修改),这是我上一次发布时才开始发生的。 我在ubuntu 18.04上使用openjdk 11.0.4 2019-07-16 Releventspom.xml条目… 我从以下类型的
我正在使用postgresql、hibernate spatial和postgis,希望能够使用SqlQuery检索几何体对象。 然而,每当我试图查询点、多边形或几何体时,例如 我得到例外: hibernate.cfg.xml: 这不是hibernate spatial产品的一部分,还是我做错了什么? 谢谢你,保罗。 相关库/版本: Hibernate核心-3.6.0.最终.jar postgre
没有意义,这个函数从2.2版就存在了, > =“3.0 USE_GEOS=1 USE_PROJ=1 USE_STATS=1” =postgis=“3.0.1 ec2a9aa”[EXTENSION]PGSQL=“120”GEOS=“3.8.0-CAPI-1.13.1”PROJ=“6.3.1”LIBXML=“2.9.10”LIBJSON=“0.13.1”LIBPROTOBUF=“1.3.3”WAGYU
我正在编写一个带有Spring boot的RESTfull API,使用Maven Liquibase来管理数据库的MySQL8迁移。 我已经在网上搜索了(1,2,3),但Liquibase在迁移中仍然生成“tinyblob”类型,而不是“point”或“geometry”。令人惊讶的是,当我编辑迁移文件(即changeSet并使用“point”)时,仍然在数据库上创建列。 我有一个典型的JPA实
将Hibernate空间升级到版本5.0.0.CR2后,以下声明不再起作用: 与一个: 如我所见,这个类不再存在于Jar文件中。几何类型发生了什么变化,它是如何被取代的?或者有另一个jar文件要包含吗? 编辑:澄清。我正在将Hibernate-Spatial与PostgreSQL-Postgis数据库结合使用。