如何将大写查询与JPA和QueryBuilder进行比较

时间:2014-03-06 09:53:32

标签: jpa uppercase

如何将大写字母与JPA QueryBuilder进行比较?

SQL:

SELECT * FROM PERSON WHERE UPPER(name) = ?

我添加:searchName.toUpperCase()

1 个答案:

答案 0 :(得分:1)

这是一个解决方案:

public List<Person> getPersonsByUpperName(String searchName) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Person> cq = cb.createQuery(Person.class);
    Root<Person> person= cq.from(Person.class);

    Path<String> name = person.get("name"); //table column

    cq.select(person);
    cq.where(cb.equal(cb.upper(name), cb.parameter(String.class, "nameUpper")));

    TypedQuery<Person> q = em.createQuery(cq);
    q.setParameter("nameUpper", searchName.toUpperCase());;

    return q.getResultList();
}

这适用于任何输入字符串(Dimitri,dimitri等),因为大写转换是在方法内执行的:

  • 表格栏:cb.upper(name)
  • 查询参数:searchName.toUpperCase()

我希望它有所帮助。