Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在JpaRepository的查询中执行PostGIS函数

在JpaRepository的查询中执行PostGIS函数
EN

Stack Overflow用户
提问于 2016-11-08 05:14:59
回答 2查看 2.1K关注 0票数 2

我有一个像这样的JpaRepository:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface PipeRepository extends JpaRepository<Pipe, Long> {
    @Query("select p from Pipe p where st_intersects(p.geometry, ?1)=true")
    Collection<Pipe> find(Geometry envelope);

    @Query(value = "SELECT st_extent(p.geometry) FROM Pipe p WHERE p.id IN ?1")
    Geometry getPipe(Collection<Number> id);
}

第一个运行正常,但第二个在初始化期间抛出此异常:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
org.hibernate.QueryException: No data type for node: org.hibernate.hql.internal.ast.tree.MethodNode
\-[METHOD_CALL] MethodNode: '('
    +-[METHOD_NAME] IdentNode: 'st_extent' {originalText=st_extent}
    \-[EXPR_LIST] SqlNode: 'exprList'
       \-[DOT] DotNode: 'pipe0_.geometry' {propertyName=geometry,dereferenceType=PRIMITIVE,getPropertyPath=geometry,path=p.geometry,tableAlias=pipe0_,className=es.x.model.Pipe,classAlias=p}
          +-[ALIAS_REF] IdentNode: 'pipe0_.id' {alias=p, className=es.x.model.Pipe, tableAlias=pipe0_}
          \-[IDENT] IdentNode: 'geometry' {originalText=geometry}

st_intersects工作的原因和st_extent不工作的原因有什么线索吗?

更新:我认为问题在于Spring不承认PostGIS函数。这个聚合函数(SQL的sum)正确工作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Query("select sum(p.id) from Pipe p where p.id in ?1")
Number getPipesSum(Collection<Number> ids);
EN

回答 2

Stack Overflow用户

发布于 2020-03-04 08:07:43

我有一个类似的问题,并解决了以下问题:

在接口中,可以使用st_astext()作为WKT接收查询结果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Query(value = "SELECT st_astext(st_extent(p.geometry)) FROM Pipe p WHERE p.id IN ?1")
String getPipe(Collection<Number> id);

您将看到返回类型是一个字符串(可能是好的,也可能不是好的)。

一旦您从数据库中取回您的WKT,我就使用org.locationtech.jts.geom.GeometryFactory将其转换回几何。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Autowired
private GeometryFactory factory;

WKTReader reader = new WKTReader(factory);
Geometry geom = reader.read(yourReturnVariable);

如果您查看geom.getGeometryType(),您将看到它是一个可行的几何学,然后您可以在其他操作中使用。

正如我之前说过的,这可能不是一个好的解决方案,但它确实有效。

票数 1
EN

Stack Overflow用户

发布于 2016-11-08 05:47:22

可能是因为st_extent函数返回box2d dataType。

查询的结果是

"BOX(x1 y1,x2 y2)",但您可以转换为几何学

SELECT st_extent(p.geometry)::geometry FROM Pipe p WHERE p.id = ?1

或者(为了避免使用:)

SELECT st_geometryFromText(st_astext(st_extent(p.geometry))),<your SRID>) FROM Pipe p WHERE p.id = ?1

我希望它能用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40487881

复制
相关文章
PostGIS查询指定范围的数据
对于上一篇PostGIS批量导入栅格数据中导入的气温数据,如何查询指定范围的气温呢? 比如,给定了经纬度范围,如何取出给定月份的数据? 下面的SQL代码给出了查询方法:
卡尔曼和玻尔兹曼谁曼
2019/01/22
3.7K0
PostGIS查询指定范围的数据
Oracle——无法在查询中执行 DML 操作
create or replace function test_f(id varchar2) return varchar2 is Result varchar2(100); begin insert into sfcs_temp_17109 (sn)values(id);
_一级菜鸟
2019/09/10
4.3K0
Oracle——无法在查询中执行 DML 操作
postgis常用函数介绍(二)
通过函数st_isempty(geom)可以判断geometry是否为空,返回是布尔型的true或者false,具体使用如下:
牛老师讲GIS
2018/10/23
2.1K0
postgis常用函数介绍(二)
postgis常用函数介绍(一)
在进行地理信息系统开发的过程中,常用的空间数据库有esri的sde,postgres的postgis以及mySQL的mysql gis等等,在本文,给大家介绍的是有关postgis的一些常用函数的意思以及使用。
牛老师讲GIS
2018/10/23
3.2K0
postgis常用函数介绍(一)
一条查询SQL在MySQL中是怎么执行的
平时我们使用的数据库,看到的通常是一个整体,比如我们执行一条查询SQL,返回一个结果集,却不知道这条语句在MySQL内部是如何执行的,接下来我们就来简单的拆解一下MySQL,看看MySQL是由哪些“零件”组成的,在这个过程中逐步的揭开MySQL的面纱,对MySQL有个深入的理解。这样在我们以后遇到MySQL的一些异常或者问题的时候,就可以快速定位问题并解决问题。
故里
2020/11/25
4.8K0
一条查询SQL在MySQL中是怎么执行的
PostgreSQL中的查询:1.查询执行阶段
PG客户端-服务协议的基本目的是双重的:将SQL查询发送到服务,接收整个执行结果作为响应。服务接收到查询去执行要经过几个阶段。
yzsDBA
2022/03/29
3.2K0
PostgreSQL中的查询:1.查询执行阶段
PostGIS特性
比如,Union操作符融合多边形之间的边界。两个交迭的多边形通过Union运算就会形成一个新的多边形,这个新的多边形的边界为两个多边形中最大边界。
cn華少
2018/09/11
1.7K0
PostGIS初探
PostGIS是PostgreSQL的空间扩展,他使得PostgreSQL支持空间数据类型,比如点、线段、折线段、多边形、椭圆等等,并且能够使用高效的空间索引进行存储和查找。
mythsman
2022/11/14
1.1K0
在 Emacs 中执行 Pyhton
最近在整理 Python 的相关的内容,主要需要整理成笔记,记录下来,等有需要的时候再进行复习。
zucchiniy
2019/10/30
1.3K0
【MYSQL函数】MYSQL中IF函数在where中的使用
WHERE IF(条件, true执行条件, false执行条件) 业务需求: 查询SUPPLIER_CLASS=0 and tp1.`TYPE_FLAG` = 1 或者 SUPPLIER_CLASS=1 实现有两种:
用户5640963
2019/07/25
12.3K0
POSTGIS 总结
PostGIS是一个空间数据库,空间数据库像存储和操作数据库中其他任何对象一样去存储和操作空间对象。
小石头
2022/11/10
6.3K0
POSTGIS 总结
[ JavaScript ] 执行函数中改变 this 的指向以及方法
bind,apply,call 都是执行函数时,用来改变 this 的指向。另外,apply、call 是立即执行,而 bind 是调用的时候才执行。
GavinUI
2021/04/07
1.2K0
[ JavaScript ] 执行函数中改变 this 的指向以及方法
指针在函数中的作用
指针传递地址时,指针变量产生了副本,但副本与原变量所指的内存区域是同一个。对指针副本指向的变量进行改变,就是改变原指针变量所指向的变量。
跋扈洋
2022/04/27
2.9K0
指针在函数中的作用
JavaScript中DOM查询封装函数
在JavaScript中可以通过BOM查询html文档中的元素,也就是所谓的在html中获取对象然后对它添加一个函数。
马克社区
2022/04/14
6310
C++中构造函数、虚函数、析构函数的执行顺序
#include <iostream> using namespace std; class A { public: // 第一步:执行类A的构造函数,输出"构造函数A" A() { cout << "构造函数A" << endl; } virtual void func() { cout << "构造A" << endl; } // 第七步:执行类A的析构函数,输出"析构函数A" ~A() { cout << "析构函数A" <<
越陌度阡
2020/11/26
2.3K0
DNS在远程调用执行中的应用
纯属蹭log4j2热度文,和安全没有直接的关系,本文只谈DNS以及日志应用; 通过dnslog.cn的截图,分析dnslog.cn的原理,基于此,介绍了可以获取更多信息的ceye的功能;在应用场景上,我们通过该原理提供了用户出口IP同本地DNS递归出口IP的对应关系,延伸出了排障场景和数据分析场景。
hermanzeng
2021/12/14
6K3
DNS在远程调用执行中的应用
MySQL 查询执行的过程
查询的生命周期大致可以按照顺序来看:从客户端到服务端,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端。其中 “执行” 可以认为是整个生命周期中最重要的阶段,其中包括了大量为了检索数据到存储引擎的调用以及调用后的数据处理,包括排序分组等。当希望 MySQL 能够以高性能的方式运行查询时,最好的办法就是弄清楚 MySQL 是如何优化和执行查询的。MySQL 执行一个查询的过程,如下:
Java架构师必看
2021/05/14
2.3K0
MySQL 查询执行的过程
Spring Data JPA 之 JpaRepository
JpaRepository是SpringBoot Data JPA提供的非常强大的基础接口。
全栈程序员站长
2022/11/01
2K0
Spring Data JPA 之 JpaRepository
Sql语句在Mysql中的执行流程
查询缓存: 执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。
Qwe7
2022/02/11
4.7K0
点击加载更多

相似问题

在函数plpgsql (POSTGIS)中执行查询

21

Laravel查询中的PostGIS函数

20

PostGIS函数中的PostgreSQL查询

10

在Postgres中的PostGis上执行多个最近邻查询

13

%喜欢在spring JpaRepository中的%查询

159
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文