使用Hibernate Spatial从PostGis检索数据

时间:2017-12-11 03:14:15

标签: hibernate spatial-query

我已经使用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的{​​{3}}他完全像我一样查询。我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的问题与此question相同,基本上您需要在服务器(jboss / wildfly)中安装postgis和所有依赖项,并将您的deps设置为provided

以下是答案的正文:

在部署应用程序之前,您需要将Postgis,hibernate-spatial和其他相关的lib添加到Wildfly,这是因为您使用的hibernate是与wildfly绑定的,但其他库与您的战争捆绑在一起,所以他们使用不同的类加载器。

如果您检查this code,您可以看到演员表是正确的,并且错误消息没有意义,这对于类加载器来说是个问题。

要解决此问题,您需要将所有库添加到您的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。