2011-01-08 29 views
19

Jak zrobić podobne ignorowanie kwerendy przy użyciu Konstruktora kryteriów. Do opisu obiektu chcę zrobić coś podobnego upper(description) like '%xyz%'hibernate jpa kryteriabuilder zignoruj ​​zapytania o kwerendy

Mam następujące kwerendy

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

Odpowiedz

39

Jest CriteriaBuilder.upper() metoda:

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

Dziękuję bardzo – user373201

2

Jeśli baza danych zawiera niemieckie rozmowę z literami jak Fußballschuhe w kolumna, java zmodyfikuje parametr wielkimi literami na FUSSBALLSCHUHE, a zapytanie nie będzie zgodne. Małe litery będą działać w tym przypadku:

personCriteriaQuery.where(criteriaBuilder.like(
    criteriaBuilder.lower(personRoot.get(Person_.description)), 
    "%"+filter.getDescription().toLowerCase()+"%")); 
Powiązane problemy