Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JPA 2 Criteria API case insensitive condition without metamodel usage

How to create Case-insensitive Criteria Query without metamodel usage?

I'm trying to do something like this:

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

But it produce error:

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

like image 288
kostepanych Avatar asked Jun 24 '13 15:06

kostepanych


2 Answers

try

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

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

seems like it method upper has some problems with accepting path

like image 113
user902383 Avatar answered Sep 20 '22 22:09

user902383


This should compile:

...builder.upper(personRoot.<String>get("firstName"))...
like image 39
Stefan Avatar answered Sep 19 '22 22:09

Stefan