Подтвердить что ты не робот

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.

4b9b3361

Ответ 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;