Как мне использовать COLLATE в Hibernate Query
Я пытаюсь использовать оператор COLLATE в запросе Hibernate SQL, но он не распознает оператор.
CONSULTA: FROM Articulos WHERE activo=0
and (codigodearticulo like '%CIN EMB%' COLLATE='Modern_Spanish_CI_AI'
or descripcion like '%CIN EMB%' COLLATE='Modern_Spanish_CI_AI'
or descripcionadicional like '%CIN EMB%' COLLATE='Modern_Spanish_CI_AI' )
and codigodelinea in
(select CODIGODELINEA from Lineas where CATAUTOPARTES='1')
И когда приложение компилируется, Hibernate возвращает это исключение:
- line 1:107: unexpected token: COLLATE
- line 1:107: unexpected token: COLLATE
- line 1:107: unexpected token: COLLATE
- Error hibernate: unexpected token: COLLATE near line 1, column 107
Я не могу найти проблему, в MSSQL Server он работает нормально.
2 ответа
К сожалению, HQL не является полной заменой SQL и, похоже, вообще не позволяет указывать параметры сортировки.
Это может быть указано в запросе Criteria. Смотрите этот ответ
Вместо того, чтобы иметь в HQL:
String hql = "SELECT e" +
" FROM EntityJPA e" +
" WHERE e.mycolumn COLLATE 'utf8_bin' = 'VALUE'"
Query query = entityManager.createQuery(hql);
Вы можете использовать собственный запрос, подобный этому
String sql = "SELECT t" +
" FROM entity_table t" +
" WHERE t.mycolumn COLLATE 'utf8_bin' = 'VALUE'"
и выполните собственный запрос:
Query query = entityManager.createNativeQuery(sql);
Это было более простое решение, учитывая, что собственный запрос создает зависимость от языка SQL целевой базы данных (в нашем случае mySQL).
Для нас это все еще было приемлемо, поскольку возможность использовать другой движок БД очень мала.