2009-12-07 4 views
7

Я переношу некоторые из своих hql-операторов в Criterias. Теперь я выясняю одну проблему: . Свойство entity - это тип Integer, но мне нужно использовать поиск подстановочных знаков, поэтому в hql I doКритерий спящего режима, целое число и «как»

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

Нет проблем вообще, Hibernate casts String to Integer.

Если бы я попробовать это в критериях, я только получить 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 обрабатывать обе эти ситуации по-разному?

+0

Это не имеет смысла. Сам механизм запросов способен управлять этим, но механизм критериев не работает. Похоже, есть ошибка в citeria impl. – onigunn

ответ

8

Вы можете использовать str expression conversion. Если это имеет смысл.

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

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

Это будет довольно медленным, если вы не имеете function based index на колонке.