Hibernate behebt Fehler mit PostGIS Geometry

8

Bezieht sich auf vorherige Frage . Ich habe eine Spring Roo-Anwendung, die Hibernate verwendet, um ein Geometry-Objekt mit JTS in eine PostGIS-Datenbank zu schreiben. Ich glaube, ich habe die Probleme behoben, die ich bei der Definition meines Geometry-Objekts hatte, und nun führt Hibernate seine persist () -Methode aus, aber etwas läuft schief, kurz bevor es die DB trifft, und ich bekomme unten die Ausnahme.

>

Hier sind einige interessante Zeilen. Zuerst von den Hibernate-Protokollen, dem Objekt, das persistiert werden soll, und dann einer SQL-Abfrage (vermutlich die? Werden ersetzt):

%Vor%

Dann passieren noch mehr Dinge, obwohl nichts offensichtlich schlecht ist. Ich sehe jedoch keine "endgültige" SQL, und es wird versucht, die Transaktion rückgängig zu machen. Dann:

%Vor%

Ich habe versucht, diesen einfachen Anwendungsfall (ein Objekt mit nur einer einzigen Geometry-Eigenschaft) seit über einer Woche in Betrieb zu bekommen, und bin damit ungefähr am Ende. Wenn ich das Geometry-Objekt durch einen String ersetze, funktioniert es gut. Weiß jemand, was einen solchen Fehler verursachen könnte?

BEARBEITEN: Thierrys Antwort unten hat mich dazu gebracht, durch die Quelle zu stochern, und mir ist aufgefallen, dass die Ausnahme in GeometrySqlTypeDescriptor geworfen wird, was einige interessante Inhalte hat:

%Vor%

Beachten Sie insbesondere den Klassenkommentar, der darauf hinweist, dass mit der Hibernate-Dialektzuordnung eindeutig etwas nicht stimmt. Leider habe ich keine Ahnung, was das bedeutet, aber ich vermute wegen einer Art Versionskonflikt. (Beachten Sie auch die Deklaration des SQL-Typs 3000, nach meiner vorherigen Fehler !)

Mein aktueller Dialekt lautet org.hibernate.spatial.dialect.postgis.PostgisDialect , wie im Hibernate Spatial-Benutzerhandbuch beschrieben. Ich verwende Hibernate Spatial 4.0-M1, JTS 1.12 und PostGIS 2.0.1. Ich werde es mit ein paar verschiedenen Versionen von PostGIS versuchen, vor allem, da dies die einzige Abhängigkeit ist, die Hibernate Spatial liefern soll, aber nicht scheint.

    
orlade 02.09.2012, 13:45
quelle

3 Antworten

14

Es scheint, dass das Problem darin bestand, dass der PostgisDialekt nicht korrekt aufgenommen und integriert wurde und daher die erforderlichen Operationen nicht unterstützt wurden. Die Lösung war so einfach wie ein Upgrade von Hibernate 3.6.9.Final auf 4.1.6.Final!

Siehe meinen Thread auf der Mailing-Liste für weitere Informationen .

Laut diesem Thread sollten Sie sich darüber im Klaren sein, dass ab Hibernate Spatial 4.0-M1 nur der Geometrietyp auf Hibernate festgelegt ist. Daher muss die @Column -Anmerkung % /%> setzen columnDefinition="Geometry" und nicht Point oder irgendetwas anderes. Dies kann in der Zukunft behoben werden.

Mit dieser Anthologie von Modifikationen kann ich endlich einen Point in eine Datenbank schreiben! Die richtige Eigenschaftsspezifikation lautet:

%Vor%     
orlade 04.09.2012, 10:04
quelle
2

Ich habe diese Ausnahme bekommen, als ich vergessen habe, den Postgis Dialekt in der Hibernate-Konfigurationsdatei hinzuzufügen.

Fügen Sie die folgende Zeile zu hibernate.cfg.xml

hinzu %Vor%     
Rajdeep Siddhapura 07.11.2015 22:53
quelle
1

Ja, die ? werden durch die Werte ersetzt, die Sie speichern müssen.

Haben Sie versucht, den folgenden Typ zu verwenden: GeometryUserType und nicht GeometryType ? Ich vermute, dass GeometryType nicht direkt von der API von Hibernate Spatial Project unterstützt wird. Es ist vielleicht eine abstrakte Klasse, die Sie nicht direkt instanziieren können, um Ihre Daten mit Anmerkungen zu versehen - sie wirkt über die Szene hinaus, wie wir experimentiert haben.

Caused by: java.lang.UnsupportedOperationException was mich dazu gebracht hat, das zu erzählen.

Und das letzte XML-Zeug in dem Tutorial, dem Sie gefolgt sind , ist klar:

%Vor%

Betrachten Sie den Code innerhalb der GeometryUserType Ich sehe nur eine Stelle, wo diese Ausnahme ausgelöst werden könnte.

%Vor%

Wo PGgeometry für PostGis Geometrie steht denke ich (oder vielleicht PostgreSQL).

Ich habe einige Themen gefunden, wo Karel Maesen und andere über die InnoDB-Unterstützung sprechen, ist nicht sehr gut, aber sie sind vielleicht veraltet ( 05-2011 ).

Viel Glück!

    
ThierryB 02.09.2012 14:46
quelle