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

Postgis 点数据类型未持久保存到数据库中

拓拔意
2023-03-14

当我尝试将Point datatype持久化到postgres DB时,它失败了,错误org.postgresql.util.PSQLE:错误: ERROR:列“Point Col就列”是点类型,但表达式是几何类型

这是我的波乔快照

@Type(type="org.hibernate.spatial.GeometryType")
@Column(columnDefinition="Point", nullable = true)
private Point pointColumn;

这是我的驱动程序和方言属性

驱动程序org.postgresql.

dialect = org . hibernate . spatial . dialect . postgis . postgis dialect

这是我的空间版详细信息

<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-spatial</artifactId>
   <version>4.3</version>
</dependency>
<dependency>
   <groupId>com.vividsolutions</groupId>
   <artifactId>jts</artifactId>
   <version>1.13</version>
</dependency>
        

甚至我已经将GeometryType注册到jdbc配置中,如下所示

GeometryType geometryType = new GeometryType();
configuration.registerTypeOverride(geometryType);

即使对于面、线串、点、多点、多面,这个问题也是真实的...

我是否缺少任何配置或几何类型实现中的预期行为?

共有2个答案

田俊爽
2023-03-14

要使用的正确几何类在< code > com . vivid solutions . jts . geom 包中。H-S将JTS几何映射到DB本机结构,因此,不要使用posgis类。这是因为要使应用程序独立于数据库(JPA API的要点之一)。

参见健康和安全概述:

HiberNate空间使用Java拓扑套件(JTS)作为其几何模型。JTS是SQLv的OpenGIS简单功能实现规范的实现。1.1(SFS)。该规范在大多数具有空间数据支持的RDBMS中实现。它也是SQL /MM第3部分:空间(ISO/IEC 13249-3)的前身的直接前身。

这是一个处理几何类型的gvNIX示例应用程序(在线演示)。这是一个JPA实体,它声明了3个几何特性:

...
import com.vividsolutions.jts.geom.LineString;
import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.geom.Polygon;
...
...
public class Owner extends AbstractPerson {

    @Type(type = "org.hibernate.spatial.GeometryType")
    private Point location;

    @Type(type = "org.hibernate.spatial.GeometryType")
    private LineString distance;

    @Type(type = "org.hibernate.spatial.GeometryType")
    private Polygon area;
}

祝你好运!!

司空福
2023-03-14

PosgreSQL有一些内置的几何支持。您正在尝试使用基础pg中的类型<code>point</code>,您需要将其更改为<code>geometry</code<,因为它是PostGIS中表示点的几何体。

 类似资料:
  • 目的 配置 NFS 共享为 OpenShift 节点提供存储,并且配置 OpenShift 持久卷以绑定至数据库 Pod。 环境 openshift v3.11.16/kubernetes v1.11.0 步骤 配置 NFS 共享持久卷1. 登录到 NFS 服务器 # ssh nfs.example.com2. 创建 config-nfs.sh 脚本,内容如下 #!/usr/bin/sh exp

  • 我在研究内存数据库的概念。有关这方面的文章说, 内存数据库系统是一种将数据完全存储在主存中的数据库管理系统。 他们讨论了这个概念的优点和缺点。 我的问题是如果这些数据库管理系统将数据完全存储在主存储器中, 停电后所有数据都消失了吗??? 还是有办法保护数据???

  • 本文向大家介绍内存型数据库Redis持久化小结,包括了内存型数据库Redis持久化小结的使用技巧和注意事项,需要的朋友参考一下 因为Redis是内存型数据库,所以为了防止因为系统崩溃等原因导致数据丢失的问题,Redis提供了两种不同的持久化方法来将数据存储在硬盘里面,一种方法是快照(RDB),它可以将存在于某一个时刻的所有数据都写入到硬盘里面,另外一种方法是只追加文件(AOF),它会在执行写命令时

  • 我想写一个脚本,它将2 GB的数据从硬盘加载到内存中,然后当其他程序请求时,它必须得到一个输入,并根据输入对这个数据进行一些计算。对我来说,重要的是将这2 GB的数据持久地保存在内存中,以加快计算速度,更重要的是避免巨大的I/O负载。 我应该如何将数据永远保存在内存中?或者更一般地说,我应该如何在Python中解决这样的问题?

  • 问题内容: 我创建了一个这样的对象: 我想保存该对象。我怎样才能做到这一点? 问题答案: 你可以使用标准库中的模块。这是你的示例的基本应用: 你还可以定义自己的简单实用程序,如下所示,该实用程序打开文件并向其中写入单个对象: 更新资料 由于这是一个非常受欢迎的答案,因此,我想谈谈一些高级用法主题。 实际使用该cPickle模块几乎总是可取的,而不是因为该模块是用C编写的并且速度更快。它们之间有一些

  • 问题内容: 我们有一个带有JSON字段的模型,其中插入了用户标志。插入确实可以按预期工作,但是删除某些标志时,它们保留在字段中,并且更改不会持久保存到数据库中。 我们的模型中有以下方法: databasse是postgres,我们对字段类型使用SQLalchemy JSON字段方言。有什么建议吗? 问题答案: 如果您使用的是Postgres <9.4,则无法直接更新JSON字段。您需要 flag_