gpt4 book ai didi

java - 在 PostgreSQL 和 JPA/Hibernate 中使用 Point 类型

转载 作者:太空狗 更新时间:2023-10-29 22:45:18 27 4
gpt4 key购买 nike

有没有办法将 Point 列映射到 Java 实体字段?

我尝试了 Hibernate Spatial 4.0,但它似乎无法与没有 PostGIS 的纯 PostgreSQL 一起使用。这是点域定义:

import com.vividsolutions.jts.geom.Point;
...
@Column(columnDefinition = "point")
@Type(type = "org.hibernate.spatial.GeometryType")
private Point location;

persistence.xml 中的方言:

<property name="hibernate.dialect"  value="org.hibernate.spatial.dialect.postgis.PostgisDialect" />

当我尝试保留这个实体时,抛出异常:

org.postgresql.util.PSQLException: Unknown type geometry.
at org.postgresql.jdbc2.AbstractJdbc2Statement.setPGobject(AbstractJdbc2Statement.java:1603)
at org.postgresql.jdbc2.AbstractJdbc2Statement.setObject(AbstractJdbc2Statement.java:1795)
at org.postgresql.jdbc3g.AbstractJdbc3gStatement.setObject(AbstractJdbc3gStatement.java:37)
at org.postgresql.jdbc4.AbstractJdbc4Statement.setObject(AbstractJdbc4Statement.java:46)
at org.hibernate.spatial.dialect.AbstractJTSGeometryValueBinder.bind(AbstractJTSGeometryValueBinder.java:48)
at org.hibernate.spatial.dialect.AbstractJTSGeometryValueBinder.bind(AbstractJTSGeometryValueBinder.java:39)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:280)
at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:275)
at org.hibernate.type.AbstractSingleColumnStandardBasicType.nullSafeSet(AbstractSingleColumnStandardBasicType.java:57)

看来它试图将值保存为 PostGIS 的几何类型。但我只想使用简单的点。

最佳答案

在您的数据库中安装 POSTGIS 扩展。

您遇到的错误是因为您没有在数据库上安装任何与 Hibernate 相关的东西。是 postgres 在提示,即:

org.postgresql.util.PSQLException: Unknown type geometry.

您的注释和配置表明它们依赖于 PostGIS:

<property name="hibernate.dialect"  value="org.hibernate.spatial.dialect.postgis.PostgisDialect" />

所以基本上您是在尝试使用不受支持的配置。

PostgreSQL 并不像 Oracle 那样提供任何人曾经想到的所有可能的数据类型。因此,当 Hibernate 说“我想要一个‘几何图形’时,PostgreSQL 只是说“什么是几何图形?”PostgreSQL 具有很强的可扩展性,这就是 PostGIS 人员所做的——他们构建了一个扩展。任何人都可以安装它或在没有它的情况下完全运行。唯一的问题它的原因是当有人期望它在开箱即用的数据库中而不是作为一个附加组件时。

我想您可能会尝试对 PostgreSQL 数据类型进行逆向工程并将它们编译到您的数据库中。 Geometry 是 PostGIS 的主父类(super class),至少在 Java 中是这样,它在数据库中看起来是一样的。我只是不明白你为什么要设置一个配置,而你永远得不到任何人的支持。

@bluish 这有帮助吗?

关于java - 在 PostgreSQL 和 JPA/Hibernate 中使用 Point 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22186506/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com