2013-06-24 45 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"))...