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?