2015-07-15 18 views
20

Dopo l'aggiornamento Hibernate-spaziale alla versione 5.0.0.CR2 la seguente dichiarazione non funziona più:Hibernate spaziale 5 - GeometryType

@Column(columnDefinition = "geometry(Point,4326)") 
@Type(type = "org.hibernate.spatial.GeometryType") 
private Point position; 

con:

org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [org.hibernate.spatial.GeometryType] 

Come posso vedere la classe non esiste più nel file Jar. Cosa è successo a GeometryType e come viene sostituito? O c'è un altro file jar da includere?

Modifica: Per chiarimenti. Sto usando Hibernate-Spatial in combinazione con un database PostgreSQL-Postgis.

risposta

26

Bene, la soluzione è troppo facile da vedere. Basta eliminare l'annotazione @type, così la dichiarazione è simile al seguente:

@Column(columnDefinition = "geometry(Point,4326)") 
private Point position; 

Source:

Nota l'annotazione @type. Questo informa Hibernate che l'attributo location è di tipo Geometry. L'annotazione @Type è specifica di Hibernate e l'unica annotazione non JPA richiesta. (Nelle versioni future di Hibernate (versione 5 e successive) non sarà più necessario dichiarare esplicitamente il tipo di attributi Geometria valori.)

+1

documentazione Hibernate e di ogni altro post non ha funzionato per Hibernate 5, ma la risposta ha fatto! Grazie! –

+0

Ho anche dovuto usare il 'GeometryFactory' corretto per creare l'oggetto' Punto'. Usando 'new GeometryFactory (new PrecisionModel(), 4326)' ha funzionato per me. –

4

La soluzione suggerita da Denis di cui sopra non ha funzionato per me su in Hibernate 5 spaziale e Mysql. Tuttavia le seguenti annotazioni hanno funzionato per me

@Column(name = "location",columnDefinition="Geometry") 
    private Geometry location; 


    @Column(name = "pointlocation",columnDefinition="Point") 
    private Point pointlocation; 
0

Sto utilizzando ibernazione 4.3.6 e ibernazione spaziale 5.2.2. La soluzione suggerita sopra non ha funzionato per me. Tuttavia il il codice qui sotto ha funzionato Se aggiungo hibernate spaziale 4,3

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

Così mi è stato segnalato questo problema per un paio di giorni, la cosa è che volevo che il tipo di database di essere dal tipo PostGIS al fine per farmi eseguire ricerche a distanza efficienti per il vicino più vicino, ecc. Alla fine ho capito come farlo e volevo condividerlo con la comunità, così ho creato un progetto demo contenente la soluzione al problema.

Il mio setup è un database PostgreSQL con Postgis, Spring boot jpa, Hibernate 5+, Hibernate-spaceial 5+ e anche la conversione in output resto, che richiedeva ancora un modulo speciale da jackson.

il progetto si trova in https://github.com/Wisienkas/springJpaGeo

il codice importante che si chiedeva era questa:

@type(type = "jts_geometry") 
private Point point; 
+0

Qual è il tipo "jts_geometry"? Pensavo che questo valore avrebbe dovuto essere un nome di classe completo? – Hervian

+0

Trovato il riferimento: https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#spatial-types – Hervian