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"/>
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With