【问题标题】:JPA 2 Criteria API case insensitive condition without metamodel usage不使用元模型的 JPA 2 Criteria API 不区分大小写条件
【发布时间】:2013-06-21 04:41:14
【问题描述】:

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

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

   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

【问题讨论】:

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


    【解决方案1】:

    试试

    Expression<String>  firstName = personRoot.get("firstName");
    
    criteria.where(builder.and(
                builder.equal(builder.upper(firstName ), filter.getFirstName())),   
                builder.equal(personRoot.get("lastName"), filter.getLastName()));
    

    似乎方法upper在接受路径方面存在一些问题

    【讨论】:

      【解决方案2】:

      这应该编译:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-14
        • 2017-09-29
        • 2018-02-26
        • 2012-01-06
        • 2017-06-26
        • 1970-01-01
        • 2014-08-08
        • 2020-03-03
        相关资源
        最近更新 更多