2011-01-08 6 views
19

Wie man eine gleiche ignorieren Fall Abfrage mit Kriterien Builder. Für Beschreibung Eigenschaft Ich möchte so etwas wie upper(description) like '%xyz%'Ruhezustand jpa criteritysbuilder ignorieren Fallabfragen

Ich habe die folgende Abfrage tun

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); 

    CriteriaQuery<Person> personCriteriaQuery = criteriaBuilder.createQuery(Person.class); 
    Root<Person> personRoot = personCriteriaQuery.from(Person.class); 

    personCriteriaQuery.select(personRoot); 
    personCriteriaQuery.where(criteriaBuilder.like(personRoot.get(Person_.description), "%"+filter.getDescription().toUpperCase()+"%")); 
    List<Person> pageResults = entityManager.createQuery(personCriteriaQuery).getResultList(); 

Antwort

39

Es gibt eine CriteriaBuilder.upper() Methode:

personCriteriaQuery.where(criteriaBuilder.like(
    criteriaBuilder.upper(personRoot.get(Person_.description)), 
    "%"+filter.getDescription().toUpperCase()+"%"));  
+1

Vielen Dank – user373201

2

Wenn die Datenbank enthält deutsche Wörter mit Buchstaben wie Fußballschuhe in die Spalte, java wird den Parameter in der Großbuchstabenmethode zu FUSSBALLSCHUHE ändern und die Abfrage wird nicht übereinstimmen. Kleinbuchstaben funktionieren in diesem Fall:

personCriteriaQuery.where(criteriaBuilder.like(
    criteriaBuilder.lower(personRoot.get(Person_.description)), 
    "%"+filter.getDescription().toLowerCase()+"%")); 
Verwandte Themen