Hibernate Spatial:“没有 JDBC 类型的方言映射:3000" [英] Hibernate Spatial: "No Dialect mapping for JDBC type: 3000"

查看:29
本文介绍了Hibernate Spatial:“没有 JDBC 类型的方言映射:3000"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过 Hibernate 将 Spring Roo 与支持 PostGIS 的 PostgreSQL 数据库集成,遵循 Hibernate 空间教程.所有非 GIS 的东西都工作正常,我已经从 PostGIS 模板创建了一个数据库.

I'm attempting to integrate Spring Roo with a PostGIS-enabled PostgreSQL database via Hibernate, following the Hibernate Spatial tutorial. All of the non-GIS stuff is working fine, and I've created a DB from a PostGIS template.

问题是,只要我将 Geometry 属性添加到我的一个实体:

The problem is that as soon as I add a Geometry property to one of my entities:

@Type(type="org.hibernate.spatial.GeometryType")
private Point centerPoint;

...它可以构建,但尝试在服务器上运行(并实际与数据库交互)导致以下错误:

... it builds okay, but attempting to run on the server (and actually interact with the DB) causes the error below:

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> 也无济于事.

Hibernate Spatial's dependencies seem to suggest that postgis-jdbc 1.5.3 is required but 1.5.3 is not present in any Maven repositories and I can't get it to compile from source. I've tried 1.5.2 and 1.3.3, and both result in the same 3000 error. HS says 1.5.3 should be "provided", but setting the dependency to 1.5.3 and <scope>provided</scope> doesn't help either.

这仅仅是需要精确版本的 JDBC 的情况,还是有其他问题?

Is this simply a case of needing a precise version of the JDBC, or is something else wrong?

我的POM相关摘录如下:

The relevant extract of my POM is as follows:

        <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"/>

推荐答案

你的异常说明 Postgresql 方言不支持你通过注解提供的数据类型.使用自定义类对其进行扩展以添加支持可能是解决问题的一种方法.

Your exception means that Postgresql dialect can't support the data type you have provided by annotation. Extending it with a custom class to add support could be a way to solve your problem.

我看过 GIS 项目,你们是否也提供 javassist 依赖和编译范围?

I've look at the GIS project, do you provide javassist dependency with compile scope too ?

您是否尝试使用以下注释引用您的数据类型?请参阅 https://stackoverflow.com/a/3047190/390462.

Did you try to reference your data types with the following annotations? See https://stackoverflow.com/a/3047190/390462.

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

据我所知,您需要为您的字段提供一个 columnDefinition,否则它将无法将该字段映射到好的 db 列.

As much as I have understood, you need to give a columnDefinition to your field, otherwise it would not be able to map the field to the good db column.

这篇关于Hibernate Spatial:“没有 JDBC 类型的方言映射:3000"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆