我正在尝试通过 Hibernate 将 Spring Roo 与启用 PostGIS 的 PostgreSQL 数据库集成,遵循Hibernate Spatial tutorial。所有非 GIS 的东西都工作正常,我已经从 PostGIS 模板创建了一个数据库。
问题是,只要我将 Geometry 属性添加到我的一个实体:
@Type(type="org.hibernate.spatial.GeometryType")
private Point centerPoint;
...它可以构建,但尝试在服务器上运行(并实际与数据库交互)会导致以下错误:
Caused by: org.hibernate.MappingException: No Dialect mapping for JDBC type: 3000
at org.hibernate.dialect.TypeNames.get(TypeNames.java:77)
at org.hibernate.dialect.TypeNames.get(TypeNames.java:100)
at org.hibernate.dialect.Dialect.getTypeName(Dialect.java:298)
at org.hibernate.mapping.Column.getSqlType(Column.java:208)
at org.hibernate.mapping.Table.sqlCreateString(Table.java:418)
at org.hibernate.cfg.Configuration.generateSchemaCreationScript(Configuration.java:1099)
at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:106)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:372)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:906)
... 41 more
Hibernate Spatial 的依赖项似乎表明 postgis-jdbc 1.5.3 是必需的,但 1.5.3 不存在于任何 Maven 存储库中,我无法从源代码编译它。我试过 1.5.2 和 1.3.3,都导致同样的 3000 错误。HS 说应该“提供” 1.5.3,但是将依赖项设置为 1.5.3<scope>provided</scope>
也无济于事。
这仅仅是需要精确版本的 JDBC 的情况,还是有其他问题?
我的POM的相关摘录如下:
<dependency>
<groupId>com.vividsolutions</groupId>
<artifactId>jts</artifactId>
<version>1.12</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-spatial</artifactId>
<version>4.0-M1</version>
</dependency>
<dependency>
<groupId>org.postgis</groupId>
<artifactId>postgis-jdbc</artifactId>
<version>1.5.2</version>
</dependency>
从persistence.xml
:
<property name="hibernate.dialect" value="org.hibernate.spatial.dialect.postgis.PostgisDialect"/>