6

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

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

   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 不能应用于给定类型;[错误] 必需:javax.persistence.criteria.Expression [错误] 发现:javax.persistence.criteria.Path

4

2 回答 2

5

这应该编译:

...builder.upper(personRoot.<String>get("firstName"))...
于 2013-12-04T12:04:03.093 回答
5

尝试

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

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

似乎它的方法上部在接受路径方面存在一些问题

于 2013-06-24T16:12:46.567 回答