2016-07-28 61 views
0

Gerade mit Postgis und Hibernate Statical gestartet und ich bekomme einige Probleme, die Abfragen.Hibernate räumliche 5 - Postgis2.2: Abfrage Probleme

Ziel: Holen Sie sich ein Museum aus einem (seinem) Geometrietyp Objekt

In meiner DB habe ich diese Kolumne:

name: geom 
type: geometry(Point,4326)) 
that contains something like: 0101000020E6100000004C8E1516D(...) 

for each museum 

Dann habe ich ein Museum Klasse mit:

@Column(name = "geom", columnDefinition = "geometry(Point,4326)") 
private Geometry   geometry; 

Und hier ist meine Frage:

WKTReader fromText = new WKTReader(); 
     try { 
      //LON and LAT are the museum's coordinates 
      Geometry geom = fromText.read("POINT("+lon+" "+lat+")"); 
      Session hibernateSession = getCurrentSession(); 

      Museum result = hibernateSession 
        .createQuery("from Museum where geometry = :geometry") 
        .setParameter("geometry", geom).uniqueResult(); 
      return result; 


     } catch (ParseException e) { 
      (...) 
     } 

Aber wenn ich versuche, es auszuführen, ich habe diesen Fehler:

ERROR: operator is not unique: geometry = bytea 
Indice : Could not choose a best candidate operator. You might need to add explicit type casts. 

So dachte ich, vielleicht Geometrie von Hibernate und Geometrie von Postgis ist nicht das Gleiche? Irgendeine Idee, wie ich es zum Laufen bringen könnte?

Danke!

Antwort

1

Ich habe das Problem gefunden.

Zuerst würde ich sicherstellen, dass ich den Postgis-Dialekt auf meiner Datei .properties hätte.

hat dieses Bild Setter haben gleiche SRID

geom.setSRID(4326); 

Dann änderte ich meine Abfrage:

.createQuery("from Museum where equals(geometry, :geometry) = true") 

Und änderte auch meine db Klasse:

@Column(name = "geom", columnDefinition = "Geometry") 

funktioniert perfekt jetzt . Dies könnte jemandem mit dem gleichen Problem helfen ...

Viel Spaß