2012-10-11 2 views
1

데이터베이스에 정수 "year"열이 있습니다.Hibernate Criteria API 조건 "like"with integer

연도 열에 "196 ..."과 같은 레코드가있는 Criteria API (HQL이 아닌)를 사용하여 어떻게 검색합니까?

나는 그것이 Restrictions.like해야한다고 생각하지만, 나는 예외를 가지고 :

SEVERE: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer 

답변

5

더 빠르고 더 좋은 솔루션은 Criterion.sqlRestriction (String sql)을 사용하는 것입니다. sql as "to_char (year) like '19 % '"를 형성 할 수 있습니다. to_char은 데이터베이스와 관련이 있습니다. 나는 JPA가 to_char 함수를 지원한다고 생각하지 않는다.

+0

그리고 이것을 사용할 때 (SQL 삽입을 방지하기 위해) 문자를 이스케이프하는 것을 잊지 마십시오! – acdcjunior

+0

또 다른 문제는 내가 테이블 조인을 가지고 있으며 두 테이블 모두 "올해"열을 가졌습니다.이 시나리오에서는 다시 오류가 발생합니다. –

5

는 사실, 예외가 여러분에게 필요한 모든 것을 말해야한다. 귀하의 경우에 Restrictions.like은 Integer를 찾고 있지만 매개 변수로 String을가집니다. (사용 된 Restrictions.like의 정확한 호출을 게시 했어야합니다).

그럼에도 불구하고 Restrictions.between 방법이 있습니다. 당신은 당신의 문제에 그것을 사용할 수 있습니다. 예 :

criteria.add(Restrictions.between("year", 1960, 1970)); 

다른 방법이 있습니다. 정수는 Restrictions.le (작거나 같음), Restrictions.lt (보다 작음), Restrictions.gt (보다 큼), Restrictions.ge (크거나 같음)과 비교할 수 있습니다.

관련 문제