web-dev-qa-db-fra.com

Requête nommée Hibernate à l'aide d'opérateurs Like et%%?

Dans mon exemple de code 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();
}

ça marche bien quand on donne String firstName=Narasimham entier

Mais cela ne fonctionne pas lorsque nous donnons un caractère de Narasimham i.e a ou n

En fait, je pense que je donne l'opérateur Like avec % % pour qu'il fonctionne avec n'importe quel caractère d'une chaîne donnée.

25
Java Developer

vous utilisez query.setParameter("searchKeyword", searchKeyword+"%"); 

au lieu de query.setParameter("searchKeyword", "%"+searchKeyword+"%");

le premier renverra des lignes pour NarasimhamNNaNarNara etc.

46
ssk

Mais cela ne fonctionne pas lorsque nous donnons un personnage de Narasimham, c'est-à-dire un ou n

Parce que vous effectuez une recherche sensible à la casse. Essayez plutôt N, Na, Nar. Si vous souhaitez effectuer une recherche insensible à la casse, essayez d'utiliser upper ou lower. comme 

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

En fait, je pense que je donne comme opérateur avec%%

searchKeyword+"%" signifie les valeurs renvoyées par commençant par searchKeyword.
"%"+searchKeyword+"%" signifie les valeurs retournées que contient searchKeyword.
Décidez selon vos exigences.

17
xyz

J'ajouterais ma voix à @ssk pour utiliser deux% avant et après le mot clé . Ou je pense que c'est une solution plus professionnelle si vous l'avez configuré dans la requête comme suit:

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

parce que '%' fait partie de la requête et non du paramètre que vous pourrez renseigner ultérieurement

La fonction CONCAT () ajoute deux expressions ou plus ensemble . https://www.w3schools.com/sql/func_mysql_concat.asp

1
Mohammad