Hibernate空间函数不断抛出意外AST节点

8

我试图查询我的实体之间的空间关系,但不断收到以下异常:

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映射时(一个是多边形,另一个是点)。

注:当我提出问题时,我最终理解了这个问题。

2个回答

22

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

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

虽然使用“while using = true”可以工作,但我发现它会导致相当大的性能损失。生成的本地查询将是ST_CONTAINS(geometry,location)=1,与仅ST_CONTAINS(geometry,location)相比,其性能非常差。在我的情况下,对于一个有400万行的表进行搜索,由于ST_CONTAINS末尾多了一个=1,这种差异就像一个查询需要2分钟而不是半秒钟一样大。 - andrei

1

对我来说,这似乎没有解决类似的问题。我回归使用带有空间限制的Criteria来解决我的问题。此示例搜索包含给定位置(此处位置为Geometry)的所有区域。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接