Hallo!
Ich möchte eine Entity, die einen PostGIS Point enthält gerne über die JPA persistieren. Es sieht jedoch so aus, also ob Postgres den Datentyp nicht akzeptiert. Ich habe also einen Converter geschrieben, der es mir ermöglicht (genauere Beschreibung meines Vorgehens: Re: [eclipselink-users] eclipseLink + PostGIS datatypes) den Point in einen Postgres Point zu konvertieren. Leider reicht mir der Postgres Point Datentyp nicht aus, da er keine Möglichkeit bietet eine "Srid" hinzuzufügen. Ich würde mich freuen, wenn jemand eine Idee hat, woran die Persistierung scheitert. Alles deutet darauf hin, dass entweder auf Java ebene nicht der richtige JDBC-Treiber verwendet wird, oder die DB, trotz Installation von PostGIS die Persistierung nicht erlaubt. Ich nutze glassfishV3 using PostGres8.3+PostGis 1.3.6.
Gruß Philipp
Der Momentane Fehler lautet:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.0.v20091127-r5931): org.eclipse.persistence.exceptions.DatabaseExcepti on
Internal Exception: org.postgresql.util.PSQLException: FEHLER: Spalte »test« hat Typ point, aber der Ausdruck hat Typ bytea
Hinweis: Sie müssen den Ausdruck umschreiben oder eine Typumwandlung vornehmen.
Position: 41
Error Code: 0
Call: INSERT INTO test (id, test) VALUES (?, ?)
bind => [7951, [B@87c962]
Query: InsertObjectQuery(entity.Test[id=7951])
Nun, Java ist mir schon immer ein Gräuel gewesen, jetzt weiß ich wieder, warum ;-)
Kannst du ihm in Java sagen, dass du da einen Typ "point" hast? Weil Java übermittels das als "bytea".
Alternativ kannst du den Typ vielleicht als Types.OTHER angeben ...
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Also, da ich die JPA benutze, wird die Typisierung durch den Java-Datentyp vorgenommen, den ich der Variable gebe und Java bietet keinen Datentyp "Other" an ;-). Ich gebe also innerhalb meiner Entity-Klasse den Typ vor, der dann über JDBC an die DB übermittelt wird. Ich bräuchte also Hilfe in diesem Java spezifischen Fall. Falls es in dieser Hinsicht Erfahrungen gibt...
Doch tut es:
OTHER
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'
Hi.
zitat: "constants(!) that are used to identify generic SQL types"(kein Java Datentyp) + "gets mapped to a Java object".
Ich denke, wir reden von verschiedenen Dingen. Ich will die JPA benutzen und keine native queries.
Das Problem nocheinmal kurz zusammengefasst:
Ich will über den EntityManager ein neues Entity in die DB schreiben. Dabei ergibt sich ein Fehler, da ich in der Klasse einen PostGIS Datentyp verwende und anscheinend hier ein Postgres point erwartet wird. Ich habe schon alle denkbaren konfigurationen aus verschiedenen wrapper Klassen verwandt, die den Postgres JDBC-Treiber wrappen sollen, aber es ändert sich nichts. Das Problem kann detailierter auf der bereits geposteten Seite nachvollzogen werden (Re: [eclipselink-users] eclipseLink + PostGIS datatypes).
Herzlichen Dank für jede mögliche Idee.
Gruß Philipp
Ich habe den Hinweis mit OTHERS auch nur von einem Bekannten, der auf diesem Weg sein Problem damit gelöst hat.
Letzten Endes versuchst du ja einen unbekannten (also ggf. "anderen") Datentyp in der Datenbank anzusprechen.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Danke für den Hinweis, würde mich interessieren, wie dein Bekannter das benutzt hat. Falls es möglich ist an eine brauchbare Beschreibung zu kommen. Mir ist nämlich unklar, wie das mein Problem löst bzw. wie man OTHERS anwenden kann, um das Problem zu lösen. Normalerweise kann man, wenn man "händisch" ein "Statement" erstellt setObject() mit Types.OTHER benutzen, aber das ist nicht mein Problem... Das Mapping soll über den EntityManager (transparent beim Persist) geschehen.
Gruß Philipp
Nun ja, da waren sie wieder, die 3 Probleme. Eines davon ist das automatisierte Mappen ...
Sorry, damit habe ich mich nicht tiefgreifend genug beschäftigt, um da etwas sagen zu können. Solche Projekte sind mir bisher nicht über den Weg gelaufen.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen