【问题标题】:Hibernate spatial functions keep throwing unexpected AST node休眠空间函数不断抛出意外的 AST 节点
【发布时间】:2026-01-13 10:45:01
【问题描述】:

我正在尝试查询我的实体之间的空间关系,但不断收到此异常:

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: ( near line 1,

我的实体工作正常,映射也是如此。我相信我的查询有问题:

SELECT r FROM Regiao r, Imovel i WHERE r.nivel = :nivel AND contains(r.regiao, i.latlng)

r.regiao 和 i.latln 都是 GeometryType 映射的(一个是多边形,另一个是点。

Ps.:当我问这个问题时,我终于明白了这个问题。

【问题讨论】:

    标签: java jpql hibernate-4.x hibernate-spatial


    【解决方案1】:

    显然,空间函数的语法要求您根据布尔值对其进行测试,因此我不得不在查询末尾添加比较:

    SELECT r FROM Regiao r, Imovel i WHERE r.nivel = :nivel AND contains(r.regiao, i.latlng) = TRUE
    

    【讨论】:

      【解决方案2】:

      对我来说,这似乎并没有解决类似的问题。 我恢复使用带有 SpatialRestriction 的 Criteria 来解决我的问题。 此示例搜索包含给定位置的所有区域,其中位置为几何。

      Criteria criteria = getCurrentSession().createCriteria(Region.class);
      criteria.add(SpatialRestrictions.contains("theGeom", location));
      

      【讨论】: