Hibernate JPAサンプルコードで..
public List<AttendeesVO> addAttendees(String searchKeyword) {
TypedQuery<AttendeesVO> query = entityManager.createQuery(" select at from AttendeesVO at where at.user.firstName LIKE :searchKeyword",AttendeesVO.class);
query.setParameter("searchKeyword", searchKeyword+"%");
return query.getResultList();
}
string firstName=Narasimham
しかし、Narasimham
の任意の文字、つまりa
またはn
を指定すると機能しません。
実際、私の考えは、Like
演算子に% %
したがって、指定された文字列の任意の文字が機能します。
あなたはquery.setParameter("searchKeyword", searchKeyword+"%");
を使用しています
query.setParameter("searchKeyword", "%"+searchKeyword+"%");
の代わりに
最初はNarasimham
N
Na
Nar
Nara
などの行を返します。
しかし、ナラシンハムのキャラクターを与えると、それは機能しません
大文字と小文字を区別して検索しているためです。代わりにN
、Na
、Nar
を試してください。大文字と小文字を区別しない検索を実行する場合は、upper
またはlower
を使用してみてください。のような
entityManager.createQuery("select at from AttendeesVO at where lower(at.user.firstName) LIKE lower(:searchKeyword)",AttendeesVO.class);
実際、私の考えでは、%%でLike演算子を使用しています。
searchKeyword+"%"
は、で始まる searchKeywordの戻り値を意味します。"%"+searchKeyword+"%"
は、含む searchKeywordの戻り値を意味します。
要件に従って決定します。
キーワードの前後に2つの%を使用するには、声を@sskに追加します。または、クエリ自体で次のように構成すると、よりプロフェッショナルなソリューションになると思います:
public List<AttendeesVO> addAttendees(String searchKeyword) {
TypedQuery<AttendeesVO> query = entityManager.createQuery(" select at from AttendeesVO
at where at.user.firstName LIKE CONCAT('%',:searchKeyword,'%')",AttendeesVO.class);
query.setParameter("searchKeyword", searchKeyword);
return query.getResultList();
}
「%」はクエリの一部であるためパラメータではなく、後で入力するもの
CONCAT()関数は、2つ以上の式を一緒に追加します。 https://www.w3schools.com/sql/func_mysql_concat.asp