Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hibernate Spatial: "No Dialect mapping for JDBC type: 3000"

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.

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'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.

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

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>

And from persistence.xml:

<property name="hibernate.dialect" value="org.hibernate.spatial.dialect.postgis.PostgisDialect"/>
like image 861
orlade Avatar asked Jan 30 '26 15:01

orlade


1 Answers

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.

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

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;

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.

like image 119
BendaThierry.com Avatar answered Feb 01 '26 09:02

BendaThierry.com



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!