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
'Development Tip' 카테고리의 다른 글
완료 버튼으로 UIPickerView를 만드는 방법은 무엇입니까? (0) | 2020.11.29 |
---|---|
무료 설치 마법사 소프트웨어 (0) | 2020.11.29 |
클릭하여 HTML 링크를 활성화하는 방법 (0) | 2020.11.29 |
객체가 Java에서 컬렉션 유형인지 확인하는 방법은 무엇입니까? (0) | 2020.11.29 |
두 개의 STL 맵을 병합하려면 어떻게해야합니까? (0) | 2020.11.29 |