Development Tip

Hibernate Criteria를 사용하는 경우 대소 문자를 구분하지 않음

yourdevel 2020. 11. 29. 12:24
반응형

Hibernate Criteria를 사용하는 경우 대소 문자를 구분하지 않음


Restrictions.ilike ( 'property', '% value %')를 보았지만 lower (property) = 'value'와 같은 SQL을 생성하고 싶습니다. 어떤 아이디어?

나는 다음을 사용했다 :

Restrictions.eq("email", email).ignoreCase()

Expression은 더 이상 사용되지 않기 때문입니다. SimpleExpression은 값에 대해 toLowerCase ()를 호출하므로 미리 수행 할 필요가 없습니다.

참조 : SimpleExpression 소스


ilike를 사용하면 누군가 "test %"및 match와 같은 항목을 입력 할 수 있으므로주의하십시오. 다음을 사용하여 하나의 앱에서 대소 문자를 구분하지 않습니다.

...
Criteria crit=session.createCriteria(Event.class);
crit.add(Expression.eq("rsvpCode","test1").ignoreCase());
...

이제 Expression은 더 이상 사용되지 않습니다. 대신 제한 사용 ...

crit(Restrictions.eq("firstName", firstName).ignoreCase());

Andy의 답변에서 알 수 있듯이 이것은 대소 문자를 구분하지 않는 검색이지만 Hibernate 버전 4.1 에서도 작동합니다 .

crit(Restrictions.eq("firstName", firstName).ignoreCase());

Hibernate의 버전 4.1.1 이상ignoreCase()Restriction.eq(). 이를 위해, 우리는 사용해야 ilike와 함께 MatchMode.

Criteria crit = session.createCriteria(ENTITY.class);
crit.add(Restrictions.ilike('PROPERTY NAME', 'VALUE', MatchMode.ANYWHERE));

예를 들어, id, name, surname 속성이 있는 USER 엔터티 의 경우 이름을 기준으로 대소 문자를 구분하지 않는 검색은 다음과 같습니다.

Criteria crit = session.createCriteria(USER.class);
crit.add(Restrictions.ilike('name', 'Satyam', MatchMode.ANYWHERE));

이것은 대소 문자를 구분하지 않고 모든 결과를 반환합니다.


확실하지는 않지만 Restriction.eq를 사용하면 SimpleExpression 객체를 얻을 수 있으며 해당 객체는 사용해 본 적이없는 ignoreCase () 작업을 지원하지만 차이를 만들 수있는 것처럼 들립니다.

이 방법이 실제로 무엇을하는지 문서화하지 않은 Hibernate에 대한 명성.


crit(Restrictions.eq("firstName", firstName).ignoreCase()); 공장.

이것은 반환 SimpleExpression Object했지만 lower(firstname)쿼리를 생성 합니다. 그래서 이것은 작동합니다.

참고 URL : https://stackoverflow.com/questions/624604/case-insensitive-equals-using-hibernate-criteria

반응형