2011-01-08 142 views
19

如何使用條件生成器做一個類似忽略大小寫查詢。爲了說明財產我要像做upper(description) like '%xyz%'hibernate jpa criteriabuilder忽略大小寫查詢

我有以下查詢

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

回答

39

有一個CriteriaBuilder.upper()方法:

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

非常感謝你 – user373201 2011-01-08 20:19:58

2

如果數據庫包含在如Fußballschuhe信德語單詞該列中,java會將大寫方法中的參數修改爲FUSSBALLSCHUHE,並且查詢不匹配。小寫字母將在這種情況下工作:

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