我正在尝试遵循Hibernate Spatial教程,通过Hibernate将Spring Roo与启用PostGIS的PostgreSQL数据库集成。所有非GIS的东西都可以正常工作,并且我已经从PostGIS模板创建了一个数据库。
问题是,一旦我向其中一个实体添加了Geometry属性,就可以:
@Type(type="org.hibernate.spatial.GeometryType") private Point centerPoint;
…构建良好,但是尝试在服务器上运行(并实际上与DB交互)会导致以下错误:
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,但任何Maven存储库中都没有1.5.3,我无法从源代码进行编译。我试过1.5.2和1.3.3,并且都导致相同的3000错误。HS表示应“提供” 1.5.3,但将依赖项设置为1.5.3 <scope>provided</scope>则无济于事。
<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:
persistence.xml
<property name="hibernate.dialect" value="org.hibernate.spatial.dialect.postgis.PostgisDialect"/>
您的例外情况意味着Postgresql方言不支持注释提供的数据类型。用自定义类扩展它以增加支持可能是解决问题的一种方法。
我看过GIS项目,您是否也提供具有编译范围的javassist依赖项?
@Column(name = "geometry", columnDefinition="Geometry", nullable = true) private Geometry geometry;
据我所知,您需要给columnDefinition您的字段一个,否则它将无法将该字段映射到良好的db列。
columnDefinition