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


102

Spring CrudRepositoryクエリ; 「name」プロパティで「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

クエリに興味がある場合は、これを試してください。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

これが役立つかもしれません、stackoverflow.com
questions / 37178520

回答:


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この動作を変更できる方法を知っていますか?私のデータベースには小文字に基づくインデックスがあります
Sudip Bhandari

@SudipBhandari:もちろんできます。
スニタ

1
複数のプロパティについてrepead IgnoreCase:次のようにList<Account> findByUsernameIgnoreCaseAndDomainIgnoreCase(String username, String domain);
Tarator

11

次のSpring data 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の場合、 '。PSQLException:ERROR:function upper(bytea)does not exist'が発生します
advortsov
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.