2015-07-15 2 views
20

После обновления Hibernate-пространственной до версии 5.0.0.CR2 следующее объявление больше не работает:Hibernate Пространственное 5 - GeometryType

@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.

ответ

26

Ну, решение слишком легко увидеть. Просто удалите @type аннотацию, так что заявление выглядит следующим образом:

@Column(columnDefinition = "geometry(Point,4326)") 
private Point position; 

Source:

Обратите внимание на @type аннотаций. Это сообщает Hibernate, что атрибут location имеет тип Geometry. Аннотирование @Type является спецификацией Hibernate и единственной аннотации, отличной от JPA. (В будущих версиях Hibernate (версии 5 и более поздней версии) он больше не будет необходимо явно объявить тип атрибутов геометрии многозначных.)

+1

гибернации документации и любой другой пост не работал спящий режим 5, но ваш ответ сделал! Благодаря! –

+0

Мне также пришлось использовать правильную «GeometryFactory» для создания объекта «Point». Использование 'new GeometryFactory (new PrecisionModel(), 4326) работало для меня. –

4

Решение, предлагаемое Денисом выше, не работает для меня на Hiberate 5 пространственный и Mysql. Однако для меня работали следующие аннотации

@Column(name = "location",columnDefinition="Geometry") 
    private Geometry location; 


    @Column(name = "pointlocation",columnDefinition="Point") 
    private Point pointlocation; 
0

Я использую спящий режим 4.3.6 и спящий режим 5.2.2. Решение, предложенное выше, не работает для меня. Однако приведенный ниже код работает Если добавить в спящем режиме пространственного 4,3

@Type(type="org.hibernate.spatial.GeometryType") 
private Point location; 
1

Так что я боролся с этой проблемой в течение нескольких дней, дело в том, что я хотел типа базы данных, чтобы быть от типа PostGIS в порядке для того, чтобы запускать эффективные дистанционные запросы для ближайшего соседа и т. д. Я, наконец, понял, как это сделать, и хотел поделиться им с сообществом, поэтому я создал демонстрационный проект, содержащий решение проблемы.

Моя установка - это база данных PostgreSQL с Postgis, Spring boot jpa, Hibernate 5+, Hibernate-пространственная 5+, а также добавлена ​​возможность преобразования в режим отдыха, что также потребовало специального модуля от jackson.

проект находится на https://github.com/Wisienkas/springJpaGeo

важный код просил был таков:

@type(type = "jts_geometry") 
private Point point; 
+0

Что такое тип "jts_geometry"? Я думал, что это значение должно быть полностью квалифицированным именем класса? – Hervian

+0

Найдено ссылок: https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#spatial-types – Hervian