3

当我尝试将 Point 数据类型持久保存到 postgres DB 时,它失败并出现错误 org.postgresql.util.PSQLException: ERROR: column "pointColumn" is of type point but expression is of type geometry

这是我的 pojo snappit

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

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

driverClass=org.postgresql.Driver

方言=org.hibernate.spatial.dialect.postgis.PostgisDialect

这是我的空间版本详细信息

<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);

甚至这个问题对于 Polygon、LineString、Point、MultiPoint、MultiPolygon 也是如此……

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

4

2 回答 2

2

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

于 2015-09-11T07:25:19.660 回答
0

要使用的正确几何类位于com.vividsolutions.jts.geom包内。HS 将 JTS 几何映射到 DB 本机结构,因此,不要使用 posgis 类。这是由于使应用程序数据库独立(JPA API 的要点之一)。

请参阅HS 概述

Hibernate Spatial 使用 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;
}

祝你好运!!

于 2015-09-14T10:35:08.217 回答