2015-07-15 6 views
20

Nach Hibernate-Raum auf Version 5.0.0.CR2 die folgende Erklärung der Aktualisierung nicht mehr funktioniert:Hibernate Spatial 5 - GeometryType

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

mit ein:

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

Wie ich sehen kann Die Klasse existiert nicht mehr in der Jar-Datei. Was ist mit dem GeometryType passiert und wie wird er ersetzt? Oder gibt es noch eine JAR-Datei?

Edit: Zur Verdeutlichung. Ich verwende Hibernate-Spatial in Kombination mit einer PostgreSQL-Postgis-Datenbank.

Antwort

26

Nun, die Lösung ist zu leicht zu sehen. Löschen Sie einfach den @Type Annotation, so sieht die Erklärung wie folgt aus:

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

Source:

Notiere die @Type Anmerkung. Dies informiert Hibernate darüber, dass das Standortattribut vom Typ Geometrie ist. Die @Type-Annotation ist Hibernate-spezifisch und die einzige Nicht-JPA-Annotation, die erforderlich ist. (In zukünftigen Versionen von Hibernate (Version 5 und höher) wird es nicht mehr notwendig sein, explizit die Art der Geometrie-wertige Attribute zu erklären.)

+1

Hibernate Dokumentation und alle anderen Posten nicht mehr als 5 für Hibernate nicht funktioniert, aber Ihre Antwort haben! Vielen Dank! –

+0

Ich musste auch die richtige 'GeometryFactory' verwenden, um das 'Point'-Objekt zu erstellen. Die Verwendung von 'new GeometryFactory (new PrecisionModel(), 4326)' funktionierte für mich. –

4

Die Lösung von Denis vorgeschlagen oben nicht für mich auf Hiberate 5 funktionierte Räumlich und Mysql. Die folgenden Annotationen funktionierten jedoch für mich:

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


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

Ich benutze Hibernate 4.3.6 und Hibernate Spatial 5.2.2. Die oben vorgeschlagene Lösung funktionierte nicht für mich. jedoch das der folgende Code gearbeitet Wenn ich 4,3

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

räumliche hinzufügen winter so dass dieses Problem für ein paar Tage zu kämpfen Ich habe, die Sache ist, dass ich den Datenbanktyp zu sein, aus dem postgis Typ, um gesucht für mich, um effiziente Distanzabfragen für den nächsten Nachbarn usw. durchzuführen. Ich habe schließlich herausgefunden, wie es geht und wollte es mit der Community teilen, also habe ich ein Demo-Projekt erstellt, das die Lösung für das Problem enthält.

Mein Setup ist eine PostgreSQL-Datenbank mit Postgis, Spring-Boot-jpa, Hibernate 5+, Hibernate-spatial 5+ und fügte auch Umwandlung in Rest-Ausgabe, die wiederum ein spezielles Modul von Jackson benötigt.

das Projekt https://github.com/Wisienkas/springJpaGeo

der wichtigen Code Sie fragte gefunden wird, war dies:

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

Was ist der Typ "jts_geometry"? Ich dachte, dieser Wert sollte ein vollständig qualifizierter Klassenname sein? – Hervian

+0

Die Referenz gefunden: https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#spatial-types – Hervian