Я хочу построить запрос для динамических типов полей. Большинство полей являются строками, но на самом деле одно из них является мгновенным. Я использую метод toPredicate() для Spring Data JPA Specification.
Expression key = root.get("someDynamicFieldname");
// with dynamic field values and field types:
String value1 = "abc";
Instant value2 = Instant.now();
Теперь мне нужно построить выражение для этого поля с общим типом значения. Я ищу что-то вроде этого:
// <TYPE???> value;
// value = value1;
// value = value2;
Expression<Boolean> expression = criteriaBuilder.lessThan(key, value);
Как этого добиться?
Я уже пробовал ParameterExpression, но в Specification у меня нет возможности установить значение параметра.
Да, не работал.




Нашел решение. Comparable - рабочий тип.
Comparable value;
value = "abc";
value = Instant.now();
Expression<Boolean> expression = criteriaBuilder.lessThan(key, value);
Вы можете убедиться, что JPA знает, как обрабатывать типы данных java.time; если объектом является только Comparable, JPA может прибегнуть к выполнению сравнений в Java вместо БД. См., например. здесь.
Интересный. Это все еще актуально для Spring Boot 2.0? Hibernate 5.2 поддерживает его, поэтому я думаю, что он не нужен (?)
Вы пробовали с
Object?