Критерии гибернации, целочисленные и "лайки" - PullRequest
7 голосов
/ 07 декабря 2009

Я перевожу некоторые из моих hql-операторов в критерии, теперь я решаю одну проблему: Свойство объекта имеет тип Integer, но мне нужно подобное с поиском по шаблону, поэтому в hql я делаю

session.createQuery("from P1 where id like :id").setString("id", "%"+s+"%")

Никаких проблем, Hibernate переводит String в Integer.

Если я попробую это в Criteria, я получу только ClassCastException

String cannot be cast to Integer

Criteria crit = sessionFactory.getCurrentSession().createCriteria(P1.class);
crit.add(Restrictions.like("id",s)).addOrder(Order.asc("id")).setMaxResults(maxResults);

Почему Hibernate по-разному обрабатывает обе ситуации?

1 Ответ

8 голосов
/ 07 декабря 2009

Вы можете использовать преобразование выражения str . Если это имеет смысл.

str () для преобразования чисел или временные значения в читаемую строку

session.createQuery("from P1 where str(id) like :id").setString("id", "%"+s+"%")

Это будет довольно медленно, если у вас нет индекса на основе функции для столбца.

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