Как десериализовать данные точки геолокации в объект Java?

0

Я пытаюсь десериализовать точку в объект 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");

Я использую следующую библиотеку для геоданных:

группа компиляции: 'com.vividsolutions', имя: 'jts', версия: '1.13'

База данных MySql, версия 8.0.13

И данные, которые я сохранил в базе данных:

Изображение 174551

Это ошибка, которую я получаю:

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.

Теги:
spring
hibernate
geolocation

2 ответа

0

установите диалект mysql в org.hibernate.spatial.dialect.mysql.MySQL56InnoDBSpatialDialect например. spring.jpa.properties.hibernate.dialect=org.hibernate.spatial.dialect.mysql.MySQL56InnoDBSpatialDialect

также убедитесь, что у вас нет несовместимости с библиотекой гибернации (если вы используете hibernate-пространственный 5.2.5. Окончательный проект работает)

0

Согласно Javadoc Repository<T, ID> значение ID следующее:

ID - тип идентификатора сущности, которой управляет хранилище

В вашей сущности MagicPoint id имеет тип Integer.
Поэтому вы должны объявить свой репозиторий как

public interface MagicPointRepository extends Repository<MagicPoint, Integer>

а не как

public interface MagicPointRepository extends Repository<MagicPoint, Point>
  • 0
    На самом деле это небольшая ошибка, однако после ее изменения у меня остается точно такое же сообщение об ошибке.
  • 0
    Я также добавил весь код на github, если у вас есть время проверить его на вашей локальной машине.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню