Получение данных из PostGis с помощью Hibernate Spatial

Я уже настроил Wildfly 10, Hibernate Spatial 5.0.1 и PostGis. Я могу успешно вставить данные в базу данных (проверено через командную строку psql), но когда я пытаюсь прочитать из базы данных, я получаю следующую ошибку:

Caused by: java.lang.IllegalStateException: Received object of type byte[]

Вот моя сущность:

import com.vividsolutions.jts.geom.Point;

 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.Id;

@Entity
public class Location {

 /*Empty constructor used on Hibernate*/
 public Location() {
 }

 public Location(String name, Point point) {
    this.name = name;
    this.location = point;
 }

 @Id
 private String name;

 @Column(nullable = false)
 private Point location;
}

и мой метод:

public Location findByName(final String name) {
    Query query = entityManager.createQuery("select l from Location l where l.name=:name", Location.class);
    query.setParameter("name", name);
    List<Location> result = query.getResultList();
    if (result != null && result.size() > 0)
        return result.get(0);
    return null;
}

Вспоминая, я могу корректно вставить в него данные, но не могу прочитать. Сначала я подумал о некотором несоответствии в нотациях Hibernate Spatial, какой-то нарушенной зависимости от pom.xml или о чем-то неправильном в persistence.xml, но поскольку я могу писать, я не думаю, что это так. Здесь в методе find он запрашивает точно так же, как и я. Что я делаю неправильно?


person rado    schedule 11.12.2017    source источник


Ответы (1)


Ваша проблема такая же, как этот вопрос , в основном вам нужно установить postgis и все зависимости на сервере (jboss/wildfly) и установить свои deps как provided.

Вот тело ответа:

Вам нужно добавить Postgis, hibernate-spatial и другие связанные библиотеки в ваш Wildfly перед развертыванием вашего приложения, потому что спящий режим, который вы используете, связан с wildfly, но другие библиотеки связаны с вашей войной, поэтому они используя разные загрузчики классов.

Если вы проверите, L109" rel="nofollow noreferrer">этот код вы можете видеть, что приведение правильное, и сообщение об ошибке не имеет смысла, обычно это проблема с загрузчиками классов.

Чтобы решить эту проблему, вам нужно добавить все библиотеки в ваш wildfly, для этого вы можете сделать:

cd $JBOSS_PATH/modules/system/layers/base/org/hibernate/main
mvn dependency:copy -Dartifact=org.hibernate:hibernate-spatial:5.0.7.Final:jar -DoutputDirectory=.
mvn dependency:copy -Dartifact=org.geolatte:geolatte-geom:1.0.1:jar -DoutputDirectory=.
mvn dependency:copy -Dartifact=com.vividsolutions:jts:1.13:jar -DoutputDirectory=.

Отредактируйте файл module.xml, чтобы добавить свои зависимости:

<resource-root path="hibernate-spatial-5.0.7.Final.jar"/>
<resource-root path="jts-1.13.jar"/>
<resource-root path="geolatte-geom-1.0.1.jar"/>

И в тег зависимостей добавьте:

<module name="org.slf4j"/>

Также, если вы используете postgresql, вам нужно добавить тег зависимостей:

<module name="org.postgresql"/>

Используйте правильную версию в команде mvn, чтобы загрузить правильный jar.

person Arturo Volpe    schedule 14.12.2017