2011-01-08 20 views
19

Cómo hacer una consulta de caso Ignorar Igual utilizando el generador de criterios. Para la descripción del inmueble Quiero hacer algo como upper(description) like '%xyz%'hibernate jpa criteriabuilder ignorar las consultas de casos

He la siguiente consulta

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

Respuesta

39

Hay un método CriteriaBuilder.upper():

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

Muchas gracias – user373201

2

Si la base de datos contiene las palabras en alemán con letras como Fußballschuhe en la columna, java modificará el parámetro en el método en mayúscula para FUSSBALLSCHUHE y la consulta no coincidirá. En minúsculas funcionará en este caso:

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