hibernate jpa criteriabuilder忽略大小写查询

时间:2011-01-08 19:48:08

标签: jpa

如何使用条件构建器执行类似忽略大小写查询。对于description属性,我想做upper(description) like '%xyz%'

之类的事情

我有以下查询

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

2 个答案:

答案 0 :(得分:71)

CriteriaBuilder.upper()方法:

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

答案 1 :(得分:12)

如果数据库在列中包含带有Fußballschuhe等字母的德语单词,则java会将大写方法中的参数修改为FUSSBALLSCHUHE,并且查询将不匹配。在这种情况下,小写将起作用:

ref.child('testlijst')
    .orderByChild('tijd')
    .endAt(dayAgo)
    .once('value')
    .then(snap => {
        const promises = [];
        snap.forEach(c => {
           const p = c.ref.remove();
           promises.push(p);
        })
        Promise.all(promises).then(result => {
            res.send("done");
        });
    });
});