Hibernate Spatial 5 - GeometryType
После обновления Hibernate-пространственного до версии 5.0.0.CR2 следующее объявление больше не работает:
@Column(columnDefinition = "geometry(Point,4326)")
@Type(type = "org.hibernate.spatial.GeometryType")
private Point position;
с:
org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [org.hibernate.spatial.GeometryType]
Как я вижу, класс больше не существует в Jar-File. Что случилось с GeometryType и как оно было заменено? Или есть еще один jar файл для включения?
Изменить: для пояснения. Я использую Hibernate-Spatial в сочетании с базой PostgreSQL-Postgis.
Ответы
Ответ 1
Ну, решение слишком легко увидеть. Просто удалите аннотацию @Type, так что объявление выглядит следующим образом:
@Column(columnDefinition = "geometry(Point,4326)")
private Point position;
Источник:
Обратите внимание на аннотацию @Type. Это сообщает Hibernate, что атрибут location имеет тип Geometry. Аннотирование @Type является спецификацией Hibernate и единственной аннотации, отличной от JPA. (В будущих версиях Hibernate (версия 5 и более поздние) уже не требуется явно указывать атрибуты типа Geometry.)
Ответ 2
Решение, предложенное Денисом выше, не работает для меня на Hiberate 5 space и Mysql. Однако для меня работали следующие аннотации
@Column(name = "location",columnDefinition="Geometry")
private Geometry location;
@Column(name = "pointlocation",columnDefinition="Point")
private Point pointlocation;
Ответ 3
Для Hibernate Spatial 5.2.x все, что вам нужно, это ниже в вашей сущности.
private Point location;
Вам не нужно columnDefinition или Type, как указано выше.
Некоторые дополнительные детали и проверки, чтобы увидеть, работает ли выше
- Как только вы запустите настройку и будете использовать
desc table_name
в mysql, вы должны увидеть тип поля геометрии. Это указывает на то, что ваше отображение спящего режима на базу данных работает нормально. - Теперь попробуйте создать сущность и repo.save(entity) из Java, и ваша сущность должна нормально сохраниться без каких-либо ошибок.
Если вышеуказанные настройки не сработали, вы, как правило, получите ошибку
Усечение данных: невозможно получить объект геометрии из данных, которые вы отправляете в поле GEOMETRY. Blockquote
Надеюсь, это поможет кому-то сэкономить 6 часов, которые я потратил впустую!
Ответ 4
Итак, я боролся с этой проблемой в течение нескольких дней, дело в том, что я хотел, чтобы тип базы данных был из типа postgis, чтобы я мог запускать эффективные дистанционные запросы для ближайшего соседа и т.д. Я, наконец, понял, как чтобы сделать это и хотел поделиться им с сообществом, поэтому я создал демонстрационный проект, содержащий решение проблемы.
Моя установка - это база данных PostgreSQL с Postgis, Spring boot jpa, Hibernate 5+, Hibernate-пространственная 5+, а также добавленная конвертация в выходной поток, что снова потребовало специального модуля от jackson.
проект находится в https://github.com/Wisienkas/springJpaGeo
важный код, который вы запрашивали, был следующим:
@type(type = "jts_geometry")
private Point point;
Ответ 5
Я использую спящий режим 4.3.6 и спящий пространственный 5.2.2. Предложенное выше решение не сработало для меня. Однако приведенный ниже код сработал, если я добавлю спящий пространственный 4.3
@Type(type="org.hibernate.spatial.GeometryType")
private Point location;