当前位置: 首页 > 知识库问答 >
问题:

Hibernate空间:用于检索几何图形的 sql 查询

微生承业
2023-03-14

我正在使用postgresql、hibernate spatial和postgis,希望能够使用SqlQuery检索几何体对象。

然而,每当我试图查询点、多边形或几何体时,例如

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产品的一部分,还是我做错了什么?

谢谢你,保罗。

相关库/版本:

  • Hibernate核心-3.6.0.最终.jar
  • postgresql-9.0-801.jdbc4.jar
  • 冬眠-空间-后盾-1.1.1.jar
  • Hibernate空间 1.1.1.jar
  • postgis-jdbc-1.3.3.jar
  • jts-1.12.jar

共有2个答案

彭修筠
2023-03-14

我正在使用Hibernate 5.1.0 Final,

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

这是可行的,但现在我觉得那冗长的陈述让人不舒服。

常朗
2023-03-14

我已经弄明白了。我需要通过标量将“GeometryUserType”应用于列。

SQLQuery qry = session.createSQLQuery("select geomfromewkt('SRID=1;POINT(1 1)') as geom");
qry.addScalar("geom", GeometryUserType.TYPE);
List<Geometry> list = qry.list();
 类似资料:
  • 所以我有这个程序需要测试两个矩形并检查: < li >如果测试矩形在参考矩形内 < li >如果测试矩形与参考矩形重叠 < li >如果测试矩形仅与参考矩形共享一条边界 < li >如果测试矩形和参考矩形不同 参考矩形和测试矩形都是用它们的中心坐标(x,y)及其宽度和高度定义的。 我相信我已经正确地编码了第一个检查,但是我无法计算出最后三个重叠、共享边界和完全不同的检查。 以下是我到目前为止四次检

  • 问题内容: 这是我的情况,我有两个基本的POJO,并给出了一个简单的hibernate映射: 我的SQL查询返回的行看起来像这样: 我的hibernate查询如下所示: 这是每个部分的内容:Hibernate文档的18.1.3:http : //docs.jboss.org/hibernate/core/3.6/reference/zh- CN/html/querysql.html#d0e1746

  • 有一个我不拥有的 graphql endpoint,但它提供了一个公共endpoint。我希望使用 graphiql 来反省它。我对 graphql 完全陌生,所以我什至不知道这种事情是否可能。 我有一个在本地运行的图形示例,并且正在修改server.js以尝试使其工作。在其他SO线程上四处走动已经让我走到了这一步…… 这段代码在 GraphQLSchema 构造函数中爆炸,试图从该内省查询中创建

  • 问题内容: 这是我的情况,我有两个基本的POJO,并给出了一个简单的休眠映射: 我的SQL查询返回的行看起来像这样: 我的休眠查询如下所示: 这是每个部分的内容:Hibernate文档的18.1.3:http : //docs.jboss.org/hibernate/core/3.6/reference/zh- CN/html/querysql.html#d0e17464 我希望在清单中得到的是2

  • 我正在使用Flatter desktop项目,我想检索一些双值,但当继续将某些字段作为空字段并尝试检索数据时,我遇到了一个错误,无法填充所有文本字段。如何将这些TextField检查为空字段并检索空值。 错误:-════════ 用手势捕捉异常═══════════════════════════════════════════ 处理手势时引发以下FormatException:无效的double

  • 用Pixi绘制几何图形 使用图片纹理是制作精灵最有效的方式之一,但是Pixi也提供了自己低级的绘画工具。你可以使用它们来创造矩形、线段、复杂的多边形以及文本。并且它使用和Canvas Drawing API几乎一致的api,所以如果你熟悉canvas的话,那么几乎没有什么新东西需要学习。当然另一个巨大的优势在于,不同于Canvas的绘画api,你使用Pixi绘制的图形是通过WebGL在GPU上渲染