2013-01-21 15 views
7

Korzystam z postgresql, hibernacji-przestrzennej i postgis i oczekuje się, że będę mógł użyć obiektu SqlQuery do pobrania obiektu Geometry.hibernacja-przestrzenna: zapytanie sql w celu pobrania geometrii

Jednak gdy próbuję kwerendy Point, Polygon lub Geometria np

List list = session.createSQLQuery(
    "select geomfromewkt('SRID=1;POINT(1 1)')").list(); 

otrzymuję wyjątek:

Caused by: org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111 
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:78) 
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:103) 
    at org.hibernate.dialect.Dialect.getHibernateTypeName(Dialect.java:328) 
    at org.hibernate.loader.custom.CustomLoader$Metadata.getHibernateType(CustomLoader.java:590) 
    at org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.performDiscovery(CustomLoader.java:516) 
    at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:532) 
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1962) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:802) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) 
    at org.hibernate.loader.Loader.doList(Loader.java:2533) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276) 
    at org.hibernate.loader.Loader.list(Loader.java:2271) 
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:316) 
    at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1842) 
    at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165) 
    at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:157) 

hibernate.cfg.xml:

<property name="dialect">org.hibernatespatial.postgis.PostgisDialect</property> 

Czy to nie jest częścią oferty hibernate-przestrzennej, czy robię coś nie tak?

Dzięki, Paul.

Odpowiednie biblioteki/wersja:

  • hibernacji rdzeń-3.6.0.Final.jar
  • postgresql-9.0-801.jdbc4.jar
  • hibernacji-przestrzenno-postgis-1.1.1 JAR
  • hibernacji-przestrzenno-1.1.1.jar
  • postgis-JDBC 1.3.3.jar
  • WST-1.12.jar
+0

Czy baza danych DB jest włączona i ma odpowiednie uprawnienia? Od klienta spróbuj 'select * from geometry_columns' –

+0

Tak, DB jest w porządku. Mogę pobrać geometrię przez hibernację, jeśli używam odwzorowanych klas i zapytań typu natywnego sql (kryteria/hsql). – pstanton

+0

Jestem pewien, że muszę zastosować "org.hibernatespatial.GeometryUserType" do kolumny jakoś ... – pstanton

Odpowiedz

6

Wymyśliłem to. Muszę zastosować "GeometryUserType" do kolumny przez skalar.

SQLQuery qry = session.createSQLQuery("select geomfromewkt('SRID=1;POINT(1 1)') as geom"); 
qry.addScalar("geom", GeometryUserType.TYPE); 
List<Geometry> list = qry.list(); 
+0

Według [tej odpowiedzi] (http://stackoverflow.com/a/10256646/1228324) niektóre typy zostały wycofane i tym samym usunięty w Hibernate 4+. Zamiast 'GeometryUserType.TYPE' musiałem użyć' org.hibernate.spatial.GeometryType.INSTANCE' w Hibernate 4.1.4. – Michi

+1

ktoś próbował zrobić podobne w hibernacji 5+? – pstanton

1

Używam Hibernacja 5.1.0 Finał

dao.getSession().createSQLQuery("select buffer from puntosdeinteres where puntoid = 13193") 
         .addScalar("buffer", new GeolatteGeometryType(PGGeometryTypeDescriptor.INSTANCE)) 
         .uniqueResult(); 

I to działa, ale teraz uważam, że długo stwierdzenie niewygodne.

Powiązane problemy