Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Hibernate Spatial从PostGis检索数据_Hibernate_Spatial Query - Fatal编程技术网

使用Hibernate Spatial从PostGis检索数据

使用Hibernate Spatial从PostGis检索数据,hibernate,spatial-query,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.persis

我已经安装了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;
}
公共位置findByName(最终字符串名){
Query Query=entityManager.createQuery(“从位置l中选择l,其中l.name=:name”,Location.class);
query.setParameter(“name”,name);
List result=query.getResultList();
if(result!=null&&result.size()>0)
返回结果get(0);
返回null;
}

记住,我可以正确地将数据插入其中,但我无法读取。首先,我想到了Hibernate Spatial的符号不一致,对
pom.xml
的依赖性被破坏,或者
persistence.xml
出现了一些错误,但由于我会写,我认为情况并非如此。在方法
find
中,他和我一样进行查询。我做错了什么?

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

以下是答案的主体:

在部署应用程序之前,您需要将Postgis、hibernate spatial和其他相关库添加到Wildfly中,这是因为您使用的hibernate与Wildfly捆绑在一起,但其他库与war捆绑在一起,因此它们使用不同的类加载器

如果您进行检查,您可以看到强制转换是正确的,并且错误消息没有任何意义,这尤其是类加载器的问题

要解决此问题,您需要将所有LIB添加到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"/>

在dependencies标记中,添加:

<module name="org.slf4j"/>

此外,如果您使用的是postgresql,则需要添加dependencies标记:

<module name="org.postgresql"/>

mvn
命令中使用正确的版本下载正确的jar