Сравнение меток времени в Spring Data JPA - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь преобразовать собственный запрос в спецификацию.Я застрял на этом условии:

....
WHERE
TIMESTAMP(D_DATA, D_TIME) >= '2015-06-23 05:46:53.000000'

Есть ли способ получить тот же результат с помощью спецификации?

Спасибо

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Благодаря Полу Вернону я решил:

public static Specification<Transit>compareTimestamps(Timestamp timestamp){
    LocalTime localTime = timestamp.toLocalDateTime().toLocalTime();
    LocalDate localDate = timestamp.toLocalDateTime().toLocalDate();
    Specification<Transit> dateSpec = compareDateWithTimestamp(localDate);
    Specification<Transit> dateTimeSpec = compareDateAndTimeWithTimestamp(localDate, localTime);
    return where(dateSpec).or(dateTimeSpec);
}

private static <T>Specification<T> compareDateWithTimestamp(LocalDate localDate){
    return (Specification<T>) (root,query,cb) -> cb.greaterThan(root.get("dTrn"),localDate);
}
private static <T>Specification<T> compareDateAndTimeWithTimestamp(LocalDate localDate, LocalTime localTime){
    return (Specification<T>) (root, query, cb) -> {
        List<Predicate> predicates = new ArrayList<>();
        predicates.add(cb.equal(root.get("dTrn"),localDate));
        predicates.add(cb.greaterThanOrEqualTo(root.get("dTimTrn"),localTime));
        return cb.and(predicates.toArray(new Predicate[]{}));
    };
}
0 голосов
/ 12 октября 2018

Не уверен, что это помогает, но этот фильтр также можно записать в Db2.

WHERE
     D_DATA >= '2015-06-23'
OR ( D_DATA  = '2015-06-23' AND D_TIME >= '05:46:53' )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...