2017-08-28 7 views
4

in einem Feder-Boot-Projekt, Java8, mit Hibernate-räumlichen und PostgresDB 9,4Ruhe Spatial postgis PSQLException Säule ist vom Typ Punkt aber Ausdruck ist vom Typ bytea

<dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-spatial</artifactId> 
     <version>5.2.10.Final</version> 
    </dependency> 

application.properties

spring.datasource.driver-class-name=org.postgresql.Driver 
spring.jpa.database-platform=org.hibernate.spatial.dialect.postgis.PostgisPG94Dialect 
spring.jpa.properties.hibernate.dialect=org.hibernate.spatial.dialect.postgis.PostgisPG94Dialect 

(ich habe auch versucht PostgisPG9Dialect)

Meine Entity hat eine Eigenschaft

... 
import com.vividsolutions.jts.geom.Point; 
.... 
@Column(columnDefinition = "Point") 
private Point cityLocation; 

Wenn ich mit Null-Wert speichern Es ist in Ordnung, aber wenn ich einen Wert setzen

setCityLocation(new GeometryFactory().createPoint(new Coordinate(lng, lat)); 

ich habe:

PSQLException: ERROR: column "city_location" is of type point but expression is of type bytea You will need to rewrite or cast the expression. 

In meinem db kann ich die Spaltendefinition als

type: point 
column size: 2147483647 
data type: 1111 
num prec radix:  10 
char octet length: 2147483647 
sehen

Ich werde VERRÜCKT ... Warum es nicht funktioniert?

UPDATE (es immer noch nicht funktionieren, ich sammle neue Informationen)

1) Ich denke, das Problem ist die Schaffung des db sein könnte. In meinem application.properties Ich habe auch:

spring.jpa.properties.hibernate.hbm2ddl.auto=update 

so das Schema 'automatisch' von Hibernate aktualisiert.

2) I mit Erfolg eine Abfrage direkt auf der db laufen kann (ich benutze "Eichhörnchen SQL" als Client)

update my_table set city_location = POINT(-13,23) where id = 1 

und wenn ich

select city_location from my_table where id = 1 

die Antwort

<Other> 

Ich kann den Wert nicht sehen ... Ich habe die gleiche Antwort für den Datensatz mit Nullwert innerhalb des Punkttyps ...

3) Nach dem Wert der ‚Punkt‘ Spalte mit einer Abfrage, ich nicht mehr in der Lage bin aus der Tabelle zu lesen, erhalte ich die Ausnahme:

org.geolatte.geom.codec.WktDecodeException : Wrong symbol at position: 1 in Wkt: (-13.0,23.0) 

4) Ich sehe innerhalb der hibernate-räumlich-5.2.10.Final.jar und ich fand zwei "geolatte" genannt Klassen im Paket org.hibernate.spatial:

GeolatteGeometryJavaTypeDescriptor.class GeolatteGeometryType.Klasse

5) und auch (spezifisch für Squirrel SQL Client-Experten): wenn ich versuche, einen Wert einer Spalte in „my_table“ (nicht dem ‚Punkt‘ CITY_LOCATION aber jeder der anderen Spalten) ich ein recive zu ändern Fehler ähnlich der, die ich in Java recive wenn ich versuche, einen Punktwert einzufügen:

Exception seen during check on DB. Exception was: 
ERROR: operator does not exist: point = character varying 
Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts. 

Eichhörnchen mit Java gemacht .. so kann ich diese seltsame Sache annehmen, kann er die Abfrage in einem ‚falschen komponieren 'weg, vielleicht ist es mit dem wert verbunden, den ich sehe, wenn ich eine auswahl mache ...

Irgendwelche Ideen?

Antwort

3

Ich fand die Lösung !!

Eine Reparatur des Codes wurde benötigt und ein Zaubertrick, den ich in einer anderen Stackoverflow-Frage gelesen habe, rettete mein Leben.

Das Problem war, dass die db Spalte in einer falschen Weise erstellt wurde:

in der db der Spaltentyp sein Geometrie NICHT Punkt

Ich entfernte die Column = "Point" sollte aus der @Column Annotation und ich lief die Abfrage

CREATE EXTENSION postgis; 

auf meinem db im Anschluss an diese Instrumente Funktionen: Postgis installation: type "geometry" does not exist

Krishna Sapkota Sie sind mein neuer Superheld!

Verwandte Themen