当前位置: 首页 > 知识库问答 >
问题:

Postgis空间功能不适用于hibernate

岳正阳
2023-03-14

我对JPareSposition进行了本机查询,如:

@Query(value = "SELECT * FROM Feature f WHERE f.feature_type = :featureType AND " +
            "ST_DWithin(geometry, 'SRID=:srid;POINT(:lon :lat 0)', :range)", nativeQuery = true)

生成的查询如下所示:

SELECT * FROM Feature f WHERE f.feature_type = ? AND ST_DWithin(geometry,'SRID=:srid;POINT(:lon :lat 0)', ?)

几何图形是表中包含空间数据的列。

但跟踪还表明查询存在解析错误:

Hint: "SR" <-- parse error at position 2 within geometry

但当我在数据库中执行查询时,我得到的结果是正确的。

为什么这个不匹配?

我最终可以通过以下方式解决这个问题:

@Query(value = "SELECT * FROM Feature f WHERE f.feature_type = :featureType AND " +
            "ST_DWithin(geometry, ST_GeographyFromText('SRID=' || :srid || ';POINT(' || :lon ||' ' || :lat || ' 0)'), :range)", nativeQuery = true)

共有1个答案

何晗昱
2023-03-14

您是字符串文本中的绑定参数,这就是为什么没有替换绑定参数。

'SRID=:srid;POINT(:lon :lat 0)'

您可以使用此数据创建一个字符串,并在方法中传递整个字符串。

另一种方法是使用数据库concat操作,但参数必须是字符串

'SRID=' || :srid|| ';POINT(' || :lon ||' ' || :lat || ' 0)'

完全查询类

@Query(value = "SELECT * FROM Feature f WHERE f.feature_type = :featureType AND " +
            "ST_DWithin(geometry, 'SRID=' || :srid || ';POINT(' || :lon ||' ' || :lat || ' 0)', :range)", nativeQuery = true)

或者使用数据库功能

ST_DWithin(geometry, ST_SetSRID(ST_Point( :lon, :lat), :srid), :range)
 类似资料:
  • 我正在尝试使用mod_wsgi使我的django项目与httpd一起工作。但我一直收到一个“500内部服务器错误”。我正在使用PostgreSQL Postgis数据库。我的操作系统是Fedora 20。 真正奇怪的是: > 任何其他数据库(mysql、sqlite3..),例如: 这是我的django项目的httpd配置文件(假设它被称为)(我把这个文件放在中): 显然产生错误的项目设置部分()

  • 我在一个网站上工作,遇到了一个问题,点击我的“删除”链接会出现一个错误页面。在localhost上运行良好-无法理解为什么在Heroku站点上会有所不同。 有人知道这是怎么回事吗? 我的“图片”控制器: 我的图片/新视图: 以下是我尝试删除图片时的heroku日志(从导航到新图片页面开始(同一视图中的新建和编辑功能): 2015-11-15T16:13:49.189857 00:00 heroku

  • 问题内容: 我有一个在列名中带有空格的数据框。我正在尝试使用方法来获得结果。在“ c”列中工作正常,但出现“ a b”错误 为此,我收到此错误: 我不想用’_’等其他字符填充空间。 有一种使用pandasql的黑客将变量名放在方括号内的示例: [ab] 问题答案: 从大熊猫开始,您将能够使用反引号转义列名称,因此您可以

  • 我在尝试通过hibernate spatial postgresql插件使用Grails 2.4.3和PostGIS数据库建立项目时遇到了很多麻烦。这是一个示例项目,除了默认插件外,没有安装其他插件。我首先启用了Postgres,并尝试将域保存到数据库中:一切正常。但一旦我启用hibernate spatial,它就不再工作了。 我和这个人有完全相同的问题。 我试着像他一样排除“hibernate

  • 期望能力“Chrome” 我有一个正确的集线器设置和一个节点 但是,当试图将浏览器指向Chrome节点之一时,它不起作用。 当前代码: 例外:org.openqa.selenium。SessionNotCreatedException:无法创建新的远程会话。所需功能=功能[{browserName=chrome,版本=55.0.2883.87 m,平台=WINDOWS}],所需功能=功能[{}]

  • 我刚刚安装了 PyCharm 社区版 3.4.1,并尝试在其中制作一个简单的 pygame 项目。我发现代码完成以一种奇怪的方式运行。在这种情况下: 当我键入事件时会立即显示带有方法的完成弹出窗口。但在第二种情况下: 弹出窗口仅包含方法。 如何学习自动完成工具来更深入地查看库?