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

Hibernate 5.0.1,将 PostGIS 数据存储为字节而不是空间类型

锺离逸春
2023-03-14

我正在尝试用以下技术组合建立一个新项目

  • Hibernate空间 5.0.1
  • PostgreSQL 9.4 with PostGIS 2.1.8
  • Spring 4.2.1
  • JTS 1.13

实体我发现<code>org.hibernate.spatial。GeometryType已被删除,现在似乎已移动到org.geolatte.geom。geo-latte-1.0.jar中的GeometryType

@Entity
@Table(name = "AREA")
@NamedQueries(@NamedQuery(name = "findAllAreas", query = "SELECT t FROM Area t"))
public class Area {
    private long id;
    private String info;
    private Geometry location;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    @Column(name = "INFO")
    public String getInfo() {
        return info;
    }
    public void setInfo(String info) {
        this.info = info;
    }
    @Column(name = "POLYGON")
    @Type(type = "org.geolatte.geom.GeometryType")
    public Geometry getLocation() {
        return location;
    }
    public void setLocation(Geometry location) {
        this.location = location;
    }

}

Spring设置

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan">
        <array>
            <value>org.example.entity</value>
        </array>
    </property>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
    </property>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            <prop key="hibernate.dialect">org.hibernate.spatial.dialect.postgis.PostgisDialect
            </prop>
        </props>
    </property>
</bean>

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.postgresql.Driver" />
    <property name="url" value="jdbc:postgresql://localhost:5432/sadb" />
    <property name="username" value="username" />
    <property name="password" value="password" />
</bean>

数据库设置

  • 视窗 ZIP 版本
  • 在 PostGIS 安装中复制
  • 新的PostGIS数据库,并创建了所有扩展postgis,postgis_topology,模糊strmatch postgis_tiger_geocoder

结果

我能够毫无问题地持久化和检索区域实体。但是列上的类型似乎是字节数据,而不是PostGIS空间类型。有什么想法我做错了吗?

sadb=> \d+ area;
                                 Table "public.area"
 Column  |          Type          | Modifiers | Storage  | Stats target | Description
---------+------------------------+-----------+----------+--------------+------------
 id      | bigint                 | not null  | plain    |              |
 info    | character varying(255) |           | extended |              |
 polygon | bytea                  |           | extended |              |

共有1个答案

司寇善
2023-03-14

使用Hibernate 5,您不需要@Type注释。包括它似乎导致了我看到的错误。删除它可以解决这个问题。多边形列具有PostGIS类型的几何体。

 类似资料:
  • 从MySQL切换到PostgreSQL后,我发现我的SQL查询(spring数据存储库界面中的@query)不再有效。这个问题是由null值作为bytea发送引起的,我得到了以下异常: 带有@Query的存储库: 简单测试: 在实际情况中,我有多个可以为null的参数,我不希望在java代码中检查它们,而是将它们发送到sql查询。我在这里检查了stackoverflow的问题,但没有找到一个好答案

  • 我有这样一个问题:我可以写到一个带有地理类型列的Postgis表,并且数据输入正确。当我试图取回它时,我得到了一个java.lang.IllegalArgumentException:不能转换org.PostgreSQL.util.PGObject类型的对象 我使用的是Hibernate Spatial 4.0M1、PostGIS2.0.2、Postgresql 9.1.7和Spring3.2、P

  • 所以,实际上我对Java编程语言还是新手,并且还在学习如何转换数据类型,所以在这种情况下,我很难将字节转换为短字节。你们能帮帮我吗?? 所以在这种情况下,我可以正常地从(int)转换为(long)数据类型,因为(long)数据大小大于(int)。这与我尝试将其从(short)转换为(int)时的情况相同。但为什么我不能使用这个概念将数据类型从(byte)转换为(short)??即使(短)数据大小大

  • 我上传图像使用平均堆栈和Multer模块 我可以从angular中检索图像,甚至可以将图像路径发布到Mongoose集合 问题是,我希望有一个图像数组,但在发布到mongoose时,它会将每个图像存储为一个新记录 图像模式 POST API 收藏已保存 如果我发布两张图像,它将按如下所示进行存储,但我希望两张图像都保存在同一记录中,即在内 ** ** 请帮忙。

  • 指向列表中的下一个节点而不是 我明白,最好使用指针版本;我不打算争论事实,但我不知道为什么这样更好。关于指针如何更好地分配内存,我得到了一个不太清楚的答案,我想知道这里是否有人能帮助我更好地理解这一点。

  • 我有一个Spring boot应用程序,可以连接到AWS上的Redis集群。我正在尝试莴苣,想创建一个,用于将键存储为字符串,而将值存储为字节数组。我尝试使用内置的,但它将键和值都作为字节数组。 我刚接触莴苣,所以我不确定是否需要编写自定义编解码器。如果是,我该怎么写?是否会出现性能问题?还是我走错了路?