it-swarm.com.de

Benannte Abfrage mit den Operatoren Like und%% in den Ruhezustand versetzen?

In meinem Hibernate JPA-Beispielcode ..

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

es funktioniert gut, wenn der gesamte String firstName=Narasimham angegeben wird

Aber es funktioniert nicht, wenn wir irgendein Zeichen von Narasimham, dh a oder n, angeben.

Eigentlich denke ich, ich gebe einen Like-Operator mit % %, damit er mit jedem beliebigen Zeichen des gegebenen Strings arbeiten kann.

25
Java Developer

sie verwenden query.setParameter("searchKeyword", searchKeyword+"%"); 

anstelle von query.setParameter("searchKeyword", "%"+searchKeyword+"%");

die erste gibt Zeilen für NarasimhamNNaNarNara usw. zurück.

46
ssk

Aber es funktioniert nicht, wenn wir irgendeinen Charakter von Narasimham, d.h. oder n

Weil Sie bei der Suche nach Groß- und Kleinschreibung suchen. Versuchen Sie stattdessen N, Na, Nar. Wenn Sie eine Suche ohne Berücksichtigung von Groß- und Kleinschreibung durchführen möchten, versuchen Sie es mit upper oder lower. mögen 

entityManager.createQuery("select at from AttendeesVO at where lower(at.user.firstName) LIKE lower(:searchKeyword)",AttendeesVO.class);  

Eigentlich denke ich, ich gebe Like Operator mit%%

searchKeyword+"%" bedeutet Rückgabewerte, die mit searchKeyword beginnen.
"%"+searchKeyword+"%" bedeutet Rückgabewerte, die enthält searchKeyword.
Entscheiden Sie nach Ihrem Requment.

17
xyz

Ich würde @ssk meine Stimme hinzufügen, um zwei% vor und nach dem Keyword zu verwenden .. oder ich denke, es ist eine professionellere Lösung, wenn Sie es in der Abfrage selbst so konfiguriert haben:

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

weil das '%' sein Teil der Abfrage nicht des Parameters ist, was Sie später ausfüllen können

Die CONCAT () - Funktion fügt zwei oder mehr Ausdrücke zusammen . https://www.w3schools.com/sql/func_mysql_concat.asp

1
Mohammad