java - 如何将地理位置点数据反序列化为Java实体?

标签 java mysql spring hibernate geolocation

我正在尝试将一个点反序列化为一个java对象。

这是我正在使用的实体类。

import lombok.Data;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

import com.vividsolutions.jts.geom.*;



@Data
@Entity(name = "magic_points")
public class MagicPoint {
    @Id
    Integer id;

    @Column(name = "p", columnDefinition="Point")
    private Point point;

    @Column(name = "description")
    private String description;
}

存储库

import com.playground.springplayground.db.entities.MagicPoint;
import com.vividsolutions.jts.geom.Point;
import org.springframework.data.repository.Repository;

public interface MagicPointRepository extends Repository<MagicPoint, Integer> {

    List<MagicPoint> getAllByDescription(String description);
}

以及我如何调用它。

        List<MagicPoint> magicPoints = magicPointRepository.getAllByDescription("Abc");

我正在使用以下地理数据库:

compile group: 'com.vividsolutions', name: 'jts', version: '1.13'

数据库是MySql,版本8.0.13

以及我存储在数据库中的数据:

enter image description here

这是我收到的错误:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: could not deserialize; nested exception is org.hibernate.type.SerializationException: could not deserialize] with root cause

java.io.StreamCorruptedException: invalid stream header: E6100000
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:866) ~[na:1.8.0_181]
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:358) ~[na:1.8.0_181]

com.vividsolutions.jts 是绘制 SQL 数据库中存储的地理数据的好方法吗? 是我缺少什么吗? 到目前为止我找不到任何与此相关的内容。如果缺少驱动程序或我应该考虑的其他依赖项,映射错误消息不会带来任何有用的信息。

编辑 为了在本地计算机上重现它,我在 Github 上添加了代码

git clone https://github.com/florin-t/deserialize-geolocation-point.git

还有一个 README.TXT,其中包含一些有关数据库和 application.config 的说明。

最佳答案

将 mysql 方言设置为 org.hibernate.spatial.dialect.mysql.MySQL56InnoDBSpatialDialect 例如。 spring.jpa.properties.hibernate.dialect=org.hibernate.spatial.dialect.mysql.MySQL56InnoDBSpatialDialect

还要确保您没有与 hibernate 库不兼容(如果您使用 hibernate-spatial 5.2.5.Final 您的项目可以正常工作)

关于java - 如何将地理位置点数据反序列化为Java实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54536957/

相关文章:

mysql - SQL - 左连接到两个表不返回任何内容

mysql - 如何自动增加mysql中特定列的值

Spring - 不是托管类型 : class

java - JPA合并外键丢失

java - 在 Java 中更新 JTextArea 的 UI

javascript - 在 JavaScript 事件上更新与 MySQL 的聊天

java - 存储客户端信息并将其发送回客户端的安全方式 - java spring mvc

java - 通过STS部署到tomcat和手动部署有区别吗?

java - java程序中的输出问题

java - JUnit Eclipse 无法运行单元测试