Мой HQL-запрос соответствует ( Спящий режим с MS SQL Server )
SELECT...FROM...WHERE...
AND...
AND REVERSE(SUBSTRING(REVERSE(**ALIAS.info**),0, CHARINDEX('@', REVERSE(**ALIAS.info**)))) in (:var1_0,:var1_1)
AND...
Запрос компилируется правильно. Однако, когда я пытаюсь использовать query.list() method
, это не удается. Причина сбоя заключается в том, что sql query
сгенерировано так:
select...from...where...
and...
and (reverse(substring(reverse(**namedinfos2_.info**), 0, CHARINDEX('@')) in (?))
and...
Обратите внимание, что после '@
' отсутствует namedinfos2_.info again
. Следовательно, CHARINDEX() function
терпит неудачу, как и ожидалось 2 parameters
. Это должно было быть ниже:
and...
and (reverse(substring(reverse(**namedinfos2_.info**), 0, CHARINDEX('@', **namedinfos2_.info**)) in (?))
and---
Есть идеи, почему это происходит? Или что я должен сделать, чтобы это исправить?
Фактический запрос довольно длинный. Пример может быть таким:
HQL:
select LastModifiedByUser.field
from namedinfo LastModifiedByUser
where REVERSE(SUBSTRING(REVERSE(LastModifiedByUser.info),0, CHARINDEX('@', REVERSE(LastModifiedByUser.info)))) in (:var1_0,:var1_1)
Сгенерированный SQL с помощью Hibernate
select namedinfos2_.field
form namedinfo namedinfos2_
where (reverse(substring(reverse(namedinfos2_.info), 0, CHARINDEX('@')) in (?))
Примечание- отсутствует преобразование LastModifiedByUser.info
в методе CHARINDEX
(2nd parameter
).