Проблема с сгенерированным SQL из Hibernate (MS SQLServer) - PullRequest
3 голосов
/ 18 октября 2010

У меня проблема с Hibernate, генерирующим SQL, который не работает на SQLServer (работает на PostgreSQL без каких-либо проблем). Я попытался установить спящий диалект для SQLServer, но тот же SQL все еще генерируется и все еще не работает. HQL-запрос выглядит так:

 select count(t) from ValidationLog t

Сгенерированный SQL выглядит так:

 select count((vl.dataKey, vl.dataType)) from ValidationLog vl;

Итак, мой вопрос, есть ли что-нибудь вокруг этого? Очень хотелось бы иметь одинаковый код для обеих баз данных.

Ответы [ 2 ]

1 голос
/ 18 октября 2010

В соответствии со спецификацией JPA ваш запрос JPQL идеально действителен :

4.8 Предложение SELECT

...

Предложение SELECT имеет следующий синтаксис:

select_clause ::= SELECT [DISTINCT] select_expression {, select_expression}*
select_expression ::=
     single_valued_path_expression |
     aggregate_expression |
     identification_variable |
     OBJECT(identification_variable) |
     constructor_expression
constructor_expression ::=
     NEW constructor_name ( constructor_item {, constructor_item}*)
constructor_item ::= single_valued_path_expression | aggregate_expression
aggregate_expression ::=
     { AVG | MAX | MIN | SUM } ([DISTINCT] state_field_path_expression) |
     <b>COUNT ([DISTINCT] identification_variable</b> | state_field_path_expression |
          single_valued_association_path_expression)

Однако вы можете стать жертвой ошибки, о которой сообщается в таких проблемах, как HHH-4044 , HHH-3096 , HHH-2266 (или даже HHH-5419 ).

Возможное решение: используйте state_field_path_expression .

select count(t.someField) from ValidationLog t
0 голосов
/ 18 октября 2010

HQL мне кажется неправильным, должно быть:

select count(t.dataKey) from ValidationLog t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...