Create a JPA Criteria fully dynamically
criteria-api, generics, java, jpa-2.0
Solution
As long as your `T` is `Comparable` (it's required for `greaterThan`), you should be able to do something like the following:
public class Container<T extends Comparable<T>> {
...
public <R> Predicate toPredicate(CriteriaBuilder cb, Root<R> root) {
...
if (">".equals(operation) {
return cb.greaterThan(root.<T>get(fieldId), value);
}
...
}
...
}
Problem
Usually I'm a Hibernate user and for my new project we use JPA 2.0. My DAO receives a Container with a generic. ``` public class Container<T> { private String fieldId; // example "id" private T value; // example new Long(100) T is a Long private String operation; // example ">" // getter/setter } ``` The following lines won't compile: ``` if (">".equals(container.getOperation()) { criteriaBuilder.greaterThan(root.get(container.getFieldId()), container.getValue()); } ``` Because I must specify the type like this: ``` if (">".equals(container.getOperation()) { criteriaBuilder.greaterThan(root.<Long>get(container.getFieldId()), (Long)container.getValue()); } ``` But I don't want to do that! Because I use a generic in my container! Have you an idea?