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