web-dev-qa-db-ja.com

春JpaRepositoryでの%Like%クエリ

JpaRepositoryにlikeクエリを書きたいのですが、何も返されません:

LIKE '%place%'-は機能していません。

LIKE 'place'は完全に機能します。

ここに私のコードがあります:

@Repository("registerUserRepository")
public interface RegisterUserRepository extends 
JpaRepository<Registration,Long>{

    @Query("Select c from Registration c where c.place like:place")
     List<Registration> findByPlaceContaining(@Param("place")String place);
}
78
sudeep cv

スプリングデータJPAクエリには、「%」文字と、クエリ内のlikeに続くスペース文字が必要です。

@Query("Select c from Registration c where c.place like %:place%")

Cf. http://docs.spring.io/spring-data/jpa/docs/current/reference/html

@Queryannotationを一緒に削除することもできます。これは、標準のクエリ(スプリングデータプロキシによって自動的に実装される)に似ているためです。つまり、単一行を使用する

List<Registration> findByPlaceContaining(String place);

十分なものです。

153
Hille

実際には@Queryアノテーションはまったく必要ありません。

あなただけを使用することができます

    @Repository("registerUserRepository")
    public interface RegisterUserRepository extends JpaRepository<Registration,Long>{

    List<Registration> findByPlaceIgnoreCaseContaining(String place);

    }
77

Spring Data JPAでサポートされているキーワード "Containing" を使用して、同様のクエリを実装することもできます。

List<Registration> findByPlaceContaining(String place);
20
amanzoor

あなたのケースでは、JPAメソッドを直接使用できます。それは怒鳴るようなものです。

含む:select ... like%:place%

List<Registration> findByPlaceContainingIgnoreCase(String place);

ここで、IgnoreCaseは、ケースを無視してアイテムを検索するのに役立ちます。

JPQLで@Queryを使用する

@Query("Select registration from Registration registration where 
registration.place LIKE  %?1%")
List<Registration> findByPlaceContainingIgnoreCase(String place);

関連する方法を次に示します。

  1. いいねfindByPlaceLike

    …x.placeは?1のようになります

  2. StartingWithfindByPlaceStartingWith

    …ここで、x.placeは?1のようになります(パラメーターが付加された%でバインドされます)

  3. EndingWithfindByPlaceEndingWith

    …ここで、x.placeは?1のようになります(パラメーターの先頭に%が付加されます)

  4. 含むfindByPlaceContaining

    …ここで、x.placeは?1のようになります(パラメーター境界は%でラップされます)

詳細、表示 this linkthis link および this

これがあなたを助けることを願っています:)

12

次のようにプレースホルダーを使用する1つの選択肢があります。

@Query("Select c from Registration c where c.place LIKE  %?1%")
List<Registration> findPlaceContainingKeywordAnywhere(String place);
5
Nitin Pawar

正確に答えます

1

関数を呼び出すとき、私は使用します:findByPlaceContaining("%" + place);

または:findByPlaceContaining(place + "%");

または:findByPlaceContaining("%" + place + "%");

1
user9290654

これを試して。

@Query("Select c from Registration c where c.place like '%'||:place||'%'")
1
Ashu