在Hibernate Spatial中获取org.postgresql.geometric.PGpoint而不是org.postgis.PGgeometry

时间:2013-12-04 03:52:39

标签: java hibernate postgresql postgis hibernate-spatial

我一直在努力解决这个问题。在Tomcat 7.0.47上运行

相关实体类摘要:

@Column(name = "geopoint", columnDefinition = "org.postgis.Geometry")
@Type(type = "org.hibernate.spatial.GeometryType")
private com.vividsolutions.jts.geom.Point geopoint;

以下是我正在使用的库:

Hibernate Spatial 4.0-M1
postgis-jdbc 2.1.0SVN (used 1.5.3 before, same issue.)
Hibernate 4.2.7

数据源信息

Datasource = org.apache.tomcat.jdbc.pool.DataSource
Driver Class Name = org.postgis.DriverWrapper
JDBC URL Beginning = jdbc:postgresql_postGIS:

数据库是安装了PostGIS的Amazon RDS上的PostgreSql 9.3。列geopoint的类型为“point”。我使用PgAdminIII

创建了这个表

Hibernate Session Factory道具

 <prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop>
 <prop key="hibernate.dialect">org.hibernate.spatial.dialect.postgis.PostgisDialect</prop>
 <prop key="hibernate.showsql">true</prop>

我调试了代码,看看JDBC似乎正在返回PGPoint。 PGGeometryValueExtractor.toJTS(Object)接收PGPoint。似乎Hibernate Spatial打算将它作为org.postgis.Geometry或org.postgis.PGGeometry对象。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

point是内置的PostgreSQL核心类型,而不是PostGIS类型。

如果您要使用PostGIS,我想您希望列类型为geometry。尝试更改列类型;如果然后将PostGIS点存储在其中,它应该按预期运行。