2013-06-24 42 views
5

如何在不使用元模型的情况下创建不区分大小写的条件查询?JPA 2 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())); 

但它产生错误:

method upper in interface javax.persistence.criteria.CriteriaBuilder cannot be applied to given types; [ERROR] required: javax.persistence.criteria.Expression [ERROR] found: javax.persistence.criteria.Path

回答

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

好像它的方法上有一些问题,接受路径

4

这应该编译:

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