hibernate-spatial:用于检索几何的SQL查询

时间:2013-01-21 09:43:19

标签: hibernate geometry postgis hibernate-spatial

我正在使用postgresql,hibernate-spatial和postgis,并期望能够使用SqlQuery来检索Geometry对象。

然而,每当我尝试查询Point,Polygon或Geometry时,例如

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

我得到例外:

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>

这不是hibernate-spatial产品的一部分,还是我做错了什么?

谢谢,保罗。

相关库/版本:

  • 冬眠核-3.6.0.Final.jar
  • 的PostgreSQL-9.0-801.jdbc4.jar
  • 冬眠-空间的PostGIS-1.1.1.jar
  • 冬眠空间-1.1.1.jar
  • PostGIS的-JDBC-1.3.3.jar
  • JTS-1.12.jar

1 个答案:

答案 0 :(得分:1)

我正在使用Hibernate 5.1.0 Final,

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

它确实有效,但现在我觉得这句长篇大论不舒服。