Spring CrudRepository를 사용한 대소 문자 구분없는 쿼리


102

Spring CrudRepository 쿼리로; "이름"속성이있는 "DeviceType"엔터티를 선택하고 싶습니다. 그러나 다음 쿼리는 대소 문자를 구분하는 방식으로 자격을 선택합니다. 대소 문자를 구분하지 않는 방법. 감사.

public interface DeviceTypeRepository extends CrudRepository<DeviceType, Integer>, JpaSpecificationExecutor<DeviceType> {

    public Iterable<DeviceType> findByNameContaining(String name);

}  

16
해봤 어 public Iterable<DeviceType> findByNameIgnoreCaseContaining(String name);?
Peter Keller

만약 당신이 Query에 관심이 있다면 이것을 시도해보십시오. LIKE <code> 다음에 '%'를 줄 필요가 없습니다. @Query (value = "select dt from DeviceType as dt where lower (dt.name) like lower (: name)") ) public Iterable <DeviceType> anyMethodNameGoesHere (@Param (name) String name); </ code>
Java_Fire_Within

답변:


197

@Peter가 주석에서 언급했듯이 정확히 다음을 추가하십시오 IgnoreCase.

public interface DeviceTypeRepository 
    extends CrudRepository<DeviceType, Integer>, JpaSpecificationExecutor<DeviceType> {

    public Iterable<DeviceType> findByNameContainingIgnoreCase(String name);
}  

메서드 이름 내에서 지원되는 모든 키워드 목록은 설명서 를 참조하십시오 .


답변 해 주셔서 감사합니다. 해당 문서를 참조하겠습니다. 감사합니다. 즐거운 시간을 !
Channa

3
그것은 나를 위해 일했습니다. JPA 쿼리를 사용하고있었습니다. 따라서 문서에 따라 UPPER (x.firstame) = UPPER (? 1) 작동했습니다.
sunitha

@sunitha 우리 가이 행동을 수정할 수있는 방법을 알고 있습니까? 내 db는 소문자를 기반으로 인덱싱
Sudip Bhandari

@SudipBhandari : 물론입니다.
sunitha

1
여러 속성의 경우 다음 IgnoreCase과 같이 반복 합니다.List<Account> findByUsernameIgnoreCaseAndDomainIgnoreCase(String username, String domain);
Tarator

11

다음 Spring 데이터 mongo 쿼리가 나를 위해 작동합니다. List대신 사용하고 싶습니다Iterator

public interface DeviceTypeRepository extends CrudRepository<DeviceType,Integer>, JpaSpecificationExecutor<DeviceType> {
    List<DeviceType> findByNameIgnoreCase(String name);
} 

1

제 경우에는 IgnoreCase 가 전혀 작동하지 않았습니다.

정규 표현식에 대한 옵션도 제공 할 수 있음을 알았습니다.

@Query(value = "{'title': {$regex : ?0, $options: 'i'}}")
Foo findByTitleRegex(String regexString);

i옵션은 쿼리에서 대소 문자를 구분하지 않습니다.


1

사용자 정의 JPA 쿼리 Upper 키워드 및 toUpperCase 를 사용하는 사람들을 위해 도움이됩니다. 다음 코드는 나를 위해 작동합니다.

 return  entityManager.createQuery("select q from "table " q  where upper(q.applicant)=:applicant")
    .setParameter("applicant",applicant.toUpperCase().trim()).getSingleResult();

1
'upper (q.applicant)'사용시주의하세요. Postgres에서는 q.applicant가 null
advortsov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.