没有元模型使用的JPA 2 Criteria API不区分大小写的条件

时间:2013-06-24 15:38:28

标签: java hibernate jpa jpa-2.0 criteria-api

如何在不使用元模型的情况下创建不区分大小写的条件查询?

我正在尝试做这样的事情:

   CriteriaBuilder builder = entityManager.getCriteriaBuilder();
    CriteriaQuery<Resident> criteria = builder.createQuery(Resident.class);
    Root<Resident> personRoot = criteria.from(Resident.class);

    criteria.where(builder.and(
            builder.equal(builder.upper(personRoot.get("firstName")), filter.getFirstName())),  //ERROR
            builder.equal(personRoot.get("lastName"), filter.getLastName()));

但它会产生错误:

  

接口javax.persistence.criteria.CriteriaBuilder中的方法upper不能应用于给定的类型;   需要[ERROR]:javax.persistence.criteria.Expression   [ERROR]发现:javax.persistence.criteria.Path

2 个答案:

答案 0 :(得分:5)

这应该编译:

...builder.upper(personRoot.<String>get("firstName"))...

答案 1 :(得分:4)

Expression<String>  firstName = personRoot.get("firstName");

criteria.where(builder.and(
            builder.equal(builder.upper(firstName ), filter.getFirstName())),   
            builder.equal(personRoot.get("lastName"), filter.getLastName()));

看起来方法上层在接受路径方面存在一些问题