2009-12-07 2 views
7

일부 hql-statements를 Criterias로 마이그레이션 할 예정입니다. 하나의 문제가 있습니다 : 엔티티 속성은 Integer 타입이지만 와일드 카드 검색과 비슷해야합니다. 나는한다.Hibernate Criteria, Integer 및 "like"

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

Hibernate는 String을 Integer로 변환한다.

나는 기준이를하려고하면, 난 단지

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는 다르게 모두 상황을 어떻게 처리합니까 ClassCastException를 얻을?

+0

이것은 의미가 없습니다. 쿼리 엔진 자체는이를 관리 할 수 ​​있지만 기준 엔진은 관리 할 수 ​​없습니다. citeria impl에 버그가있는 것 같습니다. – onigunn

답변

8

str expression conversion을 사용할 수 있습니다. 이것이 의미가있는 경우. 당신이 컬럼에 function based index이없는 경우

STR() 읽을 수있는 문자열

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

에 숫자 또는 시간 값을 변환이 매우 느려집니다.

관련 문제