Невозможно получить геометрический объект из данных, которые вы отправляете в поле GEOMETRY: Hibernate Spatial + Mysql - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь сохранить данные Point, используя Hibernate в Mysql. Но я не могу понять, что я делаю не так?

Я использую hibernate 5.3.6, jts 1.14, mysql-connector-5.1.18. База данных имеет три поля id, name и curr_loc с типом int, varchar и point соответственно

Используемый мной диалект гибернации - org.hibernate.dialect.MySQLDialect.

Это класс сущности

import com.vividsolutions.jts.geom.Point;

@Entity
@Table(name = "location")
public class Location {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private int id;

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

    @Column(name = "curr_loc")
    private Point curr_loc;

//getters and setters
}

Это код в основном методе класса SaveLocation, который хранит данные, используя hibernate

public static void main(String args[]){

     SessionFactory factory = new Configuration()        
                                .configure("hibernate.cfg.xml")
                                .addAnnotatedClass(Location.class)
                                .buildSessionFactory();
     Session session = factory.getCurrentSession();

     GeometryFactory geometryFactory = new GeometryFactory();
     Point point = geometryFactory.createPoint( new Coordinate( 10, 5 ) );
     Location tempLocation = new Location("AMD", point);
     session.beginTransaction();
     session.save(tempLocation);
     session.getTransaction().commit();
}

Когда я пытаюсь использовать MySQLSpatial56Dialect , это выдает мне эту ошибку: Не удалось получить соединение с метаданными запроса: невозможно разрешить имя [org.hibernate.dialect.MySQLSpatial56Dialect] в качестве стратегии [org.hibernate.dialect.Dialect] Исключение в потоке "main" org.hibernate.service.spi.ServiceException: невозможно создать запрошенный сервис [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

Также, если я сохраню диалект как MySQLDialect , а затем попытаюсь сохранить данные, я получаю следующую ошибку: ОШИБКА: усечение данных: невозможно получить объект геометрии из данных, отправленных в поле GEOMETRY Причина: com.mysql.jdbc.MysqlDataTruncation: Усечение данных: Невозможно получить объект геометрии из данных, отправляемых в поле GEOMETRY

Подскажите, пожалуйста, что я делаю не так? Почему я не могу использовать MySQLSpatial56Dialect. Что еще более важно, как правильно сохранить точку в базе данных, используя hibernate. Нет подходящего примера для реализации того же. Я новичок в спящем режиме и не могу решить эту проблему.

...