【发布时间】:2019-02-06 16:56:19
【问题描述】:
这是一个简化的查询,会重现错误:
SELECT
CASE
WHEN contains(buffer(r.polygon, 0.009), h.latlng) THEN 1
ELSE 0
END as near
FROM Region r, House h
WHERE r.id = 732 AND h.id = 892877180
执行session.createQuery(hql) 将抛出QuerySyntaxException: unexpected AST node: ( near line 1, column 32。第 32 列是第一个
contains 之后的左括号。
由于底层数据库是 MySQL,而这个 HQL 恰好也是有效的 MySQL,所以我针对 MySQL 数据库测试了完全相同的查询,它运行良好。所以我假设这个问题依赖于 Hibernate Query Language 语法。
我在 Hibernate 文档中没有找到任何地方说明不支持在 CASE WHEN ... THEN 子句中使用函数,也没有关于此问题的错误报告。
请注意,当没有 CASE 子句时,它可以正常工作:
SELECT contains(buffer(r.polygon, 0.009), h.latlng) as near
FROM Region r, House h
WHERE r.id = 732 AND h.id = 892877180
我在 Ubuntu Linux 18.04.1 上使用 Hibernate ORM 4.3.11、Hibernate Spatial 4.3 和 MySQL 5.6.34。
【问题讨论】:
标签: hibernate hql hibernate-spatial