Ненормальное поведение HQL при использовании JPA (*** Больше информации для читателей, чем вопрос ***) - PullRequest
0 голосов
/ 03 августа 2010

Я пытался запустить hql для некоторых целей отчетности в моем приложении на основе JPA.Следующий запрос, который я пытался, продолжал вызывать при запуске (так как я дал его как NamedQuery, он был проверен на синтаксис при запуске).

Неверный запрос:

SELECT t FROM Table_1 tb1 
INNER JOIN 
Table_2 tb2
where tb1.name = 'someName';

После множества перестановок и комбинаций (и перебора других частей запроса, о которых я подозревал ранее), я понял, что проблема заключается в « t ».Вместо приведенного выше запроса правильный запрос должен был быть ...

SELECT tb1 FROM Table_1 tb1
INNER JOIN 
Table_2 tb2
where tb1.name = 'someName';

Обратите внимание, что HQL ожидает, что tb1 будет таким же, как и короткое имя таблицы " tb1"

Недостаток tableName и несоответствие выбора только привели к проблеме, с которой я столкнулся.Удивительно, но hibernate / JPA не выдает ошибку в стеке, но развертывание продолжается, и мне нужно в конечном итоге завершить процесс java, чтобы выйти из него.

Надеюсь, это кому-нибудь поможет.

Было бы здорово, если бы кто-то мог также объяснить это поведение.

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 17 августа 2010

Лучший способ справиться с такими утверждениями - это ПРАКТИКА ставить «Переменную» в предложении SELECT так же, как таблицу «Псевдоним». То есть вместо

"SELECT t from Table_1 T1" 

сделать отметку типа

"SELECT T1 from Table_1 T1"

Надеюсь, это поможет кому-то в будущем.

0 голосов
/ 03 августа 2010

Я не уверен, что пойму вопрос, но если вы считаете, что Hibernate должен быть улучшен так, как он сообщал (или нет) ваш синтаксически некорректный NamedQuery во время EntityManagerFactory создания, вам следует создать проблему. Я не думаю, что это получит высокий приоритет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...