QueryBuilder с универсальным типом

Я хочу построить запрос для динамических типов полей. Большинство полей являются строками, но на самом деле одно из них является мгновенным. Я использую метод 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 у меня нет возможности установить значение параметра.

Вы пробовали с Object?

Victor Calatramas 01.02.2019 17:28

Да, не работал.

Michael 01.02.2019 17:51
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
291
1

Ответы 1

Нашел решение. Comparable - рабочий тип.

Comparable value;
value = "abc";
value = Instant.now();
Expression<Boolean> expression = criteriaBuilder.lessThan(key, value);

Вы можете убедиться, что JPA знает, как обрабатывать типы данных java.time; если объектом является только Comparable, JPA может прибегнуть к выполнению сравнений в Java вместо БД. См., например. здесь.

JimmyB 05.02.2019 11:45

Интересный. Это все еще актуально для Spring Boot 2.0? Hibernate 5.2 поддерживает его, поэтому я думаю, что он не нужен (?)

Michael 05.02.2019 15:23

Другие вопросы по теме