我想绑定类型为“geometry”的PostgreSQL列("b_shp")
。
特别是以下查询给出了“POLYGON”结果:
SELECT GeometryType(b_shp) ==> "POLYGON"
我找不到@Entity中@Column "b_shp"
的正确注释。
我试过这些注释:
@Column(name="b_shp", columnDefinition="geometry(MultiPolygon,4326)")
private com.vividsolutions.jts.geom.MultiPolygon b_shp;
和
@Column(name="b_shp", columnDefinition="geometry")
private com.vividsolutions.jts.geom.Geometry b_shp;
获取此错误:
ERROR:
javax.ejb.EJBException: java.lang.IllegalStateException: Received object of type org.postgresql.util.PGobject
我正在使用:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0.4.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-spatial</artifactId>
<version>5.0.4.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.0.4.Final</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4-1205-jdbc42</version>
</dependency>
<dependency>
<groupId>org.postgis</groupId>
<artifactId>postgis-jdbc</artifactId>
<version>1.3.3</version>
</dependency>
什么是正确的注释?
答案 0 :(得分:1)
我相信这不是你的注释的问题。我遇到了同样的错误,并且能够通过不使用我的wildfly提供的数据源来解决它,而是像这样连接到db(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;
我希望它有所帮助,祝你好运!
修改强>
我准备了一个展示wf10 / hibernate5 / postgis使用的工作示例项目 - 请在github上查看: