我正在使用Wildfly 10并使用Spatial Hibernate 5和PostGIS数据库开发应用程序。我在运行时收到以下错误。
java.lang.IllegalStateException: Received object of type org.postgresql.util.PGobject
有人可以建议一些关于如何在Wildfly 10中使用Spatial Hibernate的好教程吗?
答案 0 :(得分:3)
我遇到了同样的问题,我刚修好了。它基本上是一个依赖问题。问题是您在野生动物模块和部署WEB-INF / lib上加载postgresql和/或postgis jar。 我使用standalone.xml上的常规DS连接到我的数据库
<datasource jndi-name="java:jboss/datasources/mygisDS" pool-name="mygisDS" use-java-context="true">
<connection-url>jdbc:postgresql://localhost:5432/keycloak</connection-url>
<driver>org.postgresql</driver>
<transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
<pool>
<min-pool-size>10</min-pool-size>
<max-pool-size>100</max-pool-size>
<prefill>true</prefill>
<use-strict-min>false</use-strict-min>
<flush-strategy>FailingConnectionOnly</flush-strategy>
</pool>
<security>
<user-name>user</user-name>
<password>XXXXXX</password>
</security>
</datasource>
我的司机
<driver name="org.postgresql" module="org.postgresql">
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
</driver>
我试过@Toastor说,它可能已经解决了他的问题,但它并没有与我合作。虽然他给了我一些线索。
所以大多数关于互联网的文档已经过时了,而且hibernate空间没有太多空间5.我将postgis-jdbc添加到我的maven到我的wildfly里面的postgresql的module.xml,但当我正在阅读这篇文章时在Hibernate Spatial 5.X中不是必需的。 Wildfly 10默认使用5.0.7,我使用的是hibernate 5.1.0.Final,所以我没有在我的pom.xml上设置任何hibernate组件的范围为&#34;提供&#34;。 但是一切都失败了。所以我追踪了我的图书馆。
mvn dependency:tree
您必须检查所调用的任何postgresql库或任何postgis库。我发现Hibernate Spatial 5.1有一些postgresql依赖,所以我将它们从hibernate空间中排除。
<exclusion>
<artifactId>postgresql</artifactId>
<groupId>org.postgresql</groupId>
</exclusion>
我这样做了,我发现了PGobject的一个问题,它说了类似未找到的类。所以我把它添加到了jboss-deployment-structure.xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module name="org.postgresql" />
</dependencies>
</deployment>
</jboss-deployment-structure>
这就完成了工作。如果你有类似的问题,请使用maven依赖:树来跟踪你的库。
答案 1 :(得分:1)
经过几天的努力,我找到了这个解决方案:
不要通过wildfly上定义的数据源连接到数据库。而是在你的persistence.xml中:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="org.hibernate.events.jpa" transaction-type="JTA">
<properties>
<property name="hibernate.dialect" value="org.hibernate.spatial.dialect.postgis.PostgisDialect"/>
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
<property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/yourdatabase"/>
<property name="hibernate.connection.username" value="username"/>
<property name="hibernate.connection.password" value="password"/>
<property name="hibernate.connection.pool_size" value="5"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.max_fetch_depth" value="5"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
因为早期的5.0.x版本的hibernate显然没有正确集成hibernate-spatial并避免类路径问题,所以我将文件jboss-deployment-structure.xml添加到了我的META-INF:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.hibernate" />
<module name="org.postgresql" />
</exclusions>
</deployment>
</jboss-deployment-structure>
这将阻止您的部署使用wildfly提供的hibernate,以便您可以为最新的hibernate版本添加依赖项(撰写本文时为5.1.0)。然后,您需要为hibernate,hibernate-spatial和postgresql-jdbc添加依赖项。
另请注意,hibernate 5不再需要@Type注释。
我设法让我的项目使用上面的设置和我的一个具有以下属性/列的实体:
@Column(columnDefinition = "geometry(Point,4326)")
private Point position;
我希望它有所帮助,祝你好运!
修改强> 使用此方法,您需要将postgresql jdbc驱动程序添加为项目的依赖项。
修改强>
我准备了一个展示wf10 / hibernate5 / postgis使用的工作示例项目 - 请在github上查看: