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?
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);
}
...
}
...
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With