Это упрощенный запрос , который выдаст ошибку:
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.
Я не нашел нигде в документации 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
Я использую Hibernate ORM 4.3.11, Hibernate Spatial 4.3 и MySQL 5.6.34 в UbuntuLinux 18.04.1.