Я обновляю проект, чтобы в явном виде знать о клиенте, где ранее предполагался клиент, потому что у нас был только один ...
Моя проблема заключается в добавлении предложения where в мои HQL-запросы.
Моя отправная точка - этот запрос:
public static final String SELECT_DISTINCT_STORES =
"select DISTINCT e.storeNum, e.city, e.state from BoEngagement e order by e.storeNum";
Я хочу добавить предложение where e.customer_fk = :customer_fk
, но каждый раз, когда добавляю предложение where, я получаю различные ошибки org.hibernate.hql.internal.ast.QuerySyntaxException
, если только я не принимаюключевое слово distinct
, но тогда я не уверен, что запрос даст мне то, что я ожидаю.
Это работает:
"select e.storeNum, e.city, e.state from BoEngagement e WHERE e.customer_fk = :customer_fk";
И, если я собираюсьчтобы упростить этот запрос, он действительно должен быть
"select e from BoEngagement e WHERE e.customer_fk = :customer_fk";
Однако, как я уже сказал, я не уверен, что удаление ключевого слова distinct
- это то, что я хочу сделать.
ЗдесьВот некоторые вещи, которые я пробовал:
"select DISTINCT e.storeNum, e.city, e.state FROM BoEngagement e WHERE e.customer_fk = :customer_fk order by e.storeNum";
выдает эту ошибку
[ERROR] 2019-10-18 15:10:03.449 [main] BsRetrieveDistinct - java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: FROM near line 1, column 94 [SELECT DISTINCT e.city, e.state from com.bh.radar.bo.BoEngagement e order by e.state, e.city FROM com.bh.radar.bo.BoEngagement e WHERE e.customer_fk = :customer_fk]
java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: FROM near line 1, column 94 [SELECT DISTINCT e.city, e.state from com.bh.radar.bo.BoEngagement e order by e.state, e.city FROM com.bh.radar.bo.BoEngagement e WHERE e.customer_fk = :customer_fk]
, а эта более сложная версия
"select DISTINCT e.storeNum, e.city, e.state FROM BoEngagement e in " +
"(select g FROM BoEngagement g WHERE g.customer_fk = :customer_fk order by g.storeNum)";
выдает эту ошибку
[ERROR] 2019-10-18 15:08:14.317 [main] BsRetrieveDistinct - java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: in near line 1, column 81 [select DISTINCT e.storeNum, e.city, e.state FROM com.bh.radar.bo.BoEngagement e in (select g FROM com.bh.radar.bo.BoEngagement g WHERE g.customer_fk = :customer_fk order by g.storeNum)]
java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: in near line 1, column 81 [select DISTINCT e.storeNum, e.city, e.state FROM com.bh.radar.bo.BoEngagement e in (select g FROM com.bh.radar.bo.BoEngagement g WHERE g.customer_fk = :customer_fk order by g.storeNum)]
Очевидно, я не полностью понимаю HQL и ключевое слово distinct
. Что я делаю не так?
Редактировать:
@ Дж. Б. Низет прокомментировал, что, основываясь на опубликованной мной ошибке, он не думает, что я выполняю запрос, который явывешенный. Я абсолютно выполняю этот запрос. Моя загадка - почему HQL, который я написал, генерирует два предложения FROM в SQL. Я вставил скриншот ниже, показывающий соответствующий код и сообщение об ошибке.