Как использовать функцию левой строки в hql - PullRequest
3 голосов
/ 09 марта 2012

У меня есть SQL-запрос, подобный этому

select column from table where path = left('INPUTSTRING', length(path));

и пытается выполнить это в hql, как это,

  return session.createQuery("from Table where Path = left(:input, length(Path))").
                            query.setParameter("input", inputPath).
                            .list();

и получаю такую ​​ошибку

Caused by: org.hibernate.hql.ast.QuerySyntaxException: unexpected token: left near line 1

как это сделать? Что такое соответствующая строковая функция в hql? Есть ли решение для этого, используя критерии запроса apis?

Ответы [ 2 ]

2 голосов
/ 09 марта 2012

Да, left() не поддерживается MySQLDialect. См. Список поддерживаемых функций HQL в API документах .

Теперь у вас осталось 2 варианта.

  1. Использовать session.createSQLQuery() метод.
  2. Создайте свой собственный класс Dialect, расширив MySQLDialect и зарегистрируйте там функцию. Об этом говорится на форуме hibernate здесь хорошо объяснено в блоге здесь .
0 голосов
/ 09 марта 2012

Я не уверен, что HQL сделает это за вас, но вы можете использовать IQuery / session.CreateSQLQuery (), чтобы использовать необработанный запрос SQL для заполнения сопоставленной сущности.Я никогда не использовал его для подстрок, но использовал его для агрегатных функций.Посмотрите главу 13 документации NHibernate и посмотрите, подходит ли она вам.Вы можете проверить подстановку запросов, доступных в Nhibernate - здесь

...