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);
}
スプリングデータ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 。
@Query
annotationを一緒に削除することもできます。これは、標準のクエリ(スプリングデータプロキシによって自動的に実装される)に似ているためです。つまり、単一行を使用する
List<Registration> findByPlaceContaining(String place);
十分なものです。
実際には@Query
アノテーションはまったく必要ありません。
あなただけを使用することができます
@Repository("registerUserRepository")
public interface RegisterUserRepository extends JpaRepository<Registration,Long>{
List<Registration> findByPlaceIgnoreCaseContaining(String place);
}
Spring Data JPAでサポートされているキーワード "Containing" を使用して、同様のクエリを実装することもできます。
List<Registration> findByPlaceContaining(String place);
あなたのケースでは、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);
関連する方法を次に示します。
いいねfindByPlaceLike
…x.placeは?1のようになります
StartingWithfindByPlaceStartingWith
…ここで、x.placeは?1のようになります(パラメーターが付加された%でバインドされます)
EndingWithfindByPlaceEndingWith
…ここで、x.placeは?1のようになります(パラメーターの先頭に%が付加されます)
含むfindByPlaceContaining
…ここで、x.placeは?1のようになります(パラメーター境界は%でラップされます)
詳細、表示 this link 、 this link および this
これがあなたを助けることを願っています:)
次のようにプレースホルダーを使用する1つの選択肢があります。
@Query("Select c from Registration c where c.place LIKE %?1%")
List<Registration> findPlaceContainingKeywordAnywhere(String place);
正確に答えます
関数を呼び出すとき、私は使用します:findByPlaceContaining("%" + place);
または:findByPlaceContaining(place + "%");
または:findByPlaceContaining("%" + place + "%");
これを試して。
@Query("Select c from Registration c where c.place like '%'||:place||'%'")