Выберите метку времени MAX с помощью API критериев JPA2 - PullRequest
29 голосов
/ 08 марта 2012

Итак, моя сущность имеет:

@Column(name="TS", nullable=false)
private java.sql.Timestamp timestamp; 

Моя сгенерированная метамодель имеет:

public static volatile SingularAttribute<MyEntity,Timestamp> timestamp;

Я хочу выбрать по значению Max Timestamp:

Root<MyEntity> root = query.from(MyEntity.class);
Expression maxExpression = cb.max(root.get(MyEntity_.timestamp));

Но я не допускаюсь, потому что:

max(Expression<N> x) Создайте агрегированное выражение, используя числовую операцию max.<N extends java.lang.Number> Выражение

Конечно Timestamp не распространяется Number.

Как я могу сделать MAX для столбца Timestamp, используя типизированный API Criteria?

1 Ответ

46 голосов
/ 18 марта 2012

Вместо max вы должны использовать CriteriaBuilder.greatest для метки времени (а также для даты, строки и других сопоставимых элементов). И если вам когда-либо понадобится MIN для метки времени, используйте метод наименьшего числа

С подобной проблемой можно столкнуться при сравнении меньше / больше / равнее. Первый принимает аргумент, который расширяет число, второй - для других сопоставимых:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...