web-dev-qa-db-ja.com

Spring CrudRepositoryを使用した大文字と小文字を区別しないクエリ

Spring CrudRepository Queryを使用します。 「name」プロパティを持つ「DeviceType」エンティティを選択したい。ただし、次のクエリでは大文字と小文字を区別する方法で資格を選択します。大文字と小文字を区別しない方法。ありがとう。

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

    public Iterable<DeviceType> findByNameContaining(String name);

}  
87
Channa

コメントで@Peterが言及したとおり、IgnoreCaseを追加するだけです。

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

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

メソッド名内でサポートされているすべてのキーワードのリストについては、 documentation を参照してください。

171
Roadrunner

次のSpringデータmongoクエリは、私のために機能します。 Listの代わりにIteratorを使用したい

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

私の場合、IgnoreCaseを追加してもまったく機能しませんでした。

正規表現のオプションも提供できることがわかりました:

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

iオプションは、大文字と小文字を区別しないクエリを作成します。

1
rocksteady

カスタムJPAクエリを使用する場合pperキーワードおよびtoUpperCaseが役立ちます。次のコードは私のために働く

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