一尘不染

Hibernate Spatial:“ JDBC类型没有方言映射:3000”

hibernate

我正在尝试遵循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>则无济于事。

这仅仅是需要精确版本的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"/>

阅读 205

收藏
2020-06-20

共1个答案

一尘不染

您的例外情况意味着Postgresql方言不支持注释提供的数据类型。用自定义类扩展它以增加支持可能是解决问题的一种方法。

我看过GIS项目,您是否也提供具有编译范围的javassist依赖项?

@Column(name = "geometry", columnDefinition="Geometry", nullable = true) 
private Geometry geometry;

据我所知,您需要给columnDefinition您的字段一个,否则它将无法将该字段映射到良好的db列。

2020-06-20