39

私のHibernateJPAサンプルコードでは。

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();
}

文字列全体を指定すると正常に機能しますfirstName=Narasimham

Narasimhamしかし、 ieaまたはの文字を与えると機能しませんn

実際、私の考えでは、Like演算子を指定し% %ているので、指定された文字列の任意の文字を処理できます。

4

3 に答える 3

59

使用しているquery.setParameter("searchKeyword", searchKeyword+"%");

それ以外のquery.setParameter("searchKeyword", "%"+searchKeyword+"%");

最初のものはNarasimham N Na Nar Naraなどの行を返します。

于 2013-01-02T09:06:38.930 に答える
19

しかし、ナラシムハムのキャラクター、つまりaまたはnを与えると、機能しません。

大文字と小文字を区別する検索を行っているためです。代わりNNa、を試してください。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+"%"戻り値を意味します。 要件に従って決定します。

于 2013-01-02T09:12:42.317 に答える
9

@sskに自分の声を追加して、キーワードの前後に2%を使用します。または、クエリ自体で次のように構成した場合、より専門的なソリューションになると思います。

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

于 2019-01-18T11:05:01.123 に答える