Оператор If/Case в JPA Criteria Builder

Я хочу создать запрос, который ищет даты для разных объектов. Моя структура:

  • У контракта есть дата (не обнуляемая)
  • У сотрудника есть дата (не обнуляемая)
  • У сотрудника может быть идентификатор контракта (обнуляемый)

Если у сотрудника есть контракт, я хочу получить дата контракта. Если у сотрудника нет контракта, я хочу вернуть дату сотрудника.

Пока мой код таков:

if (inputDate!= null) {
    ParameterExpression<Date> exp = criteriaBuilder.parameter(Date.class, "inputDate");
    criteria.add(criteriaBuilder.or(
        criteriaBuilder.isNull(employee.get("contract")),
        criteriaBuilder.lessThanOrEqualTo(employee.<Date>get("creationDate"), exp),   criteriaBuilder.lessThanOrEqualTo((employee.join("contract").<Date>get("fromDate")), exp) ));}

Это, похоже, не работает. Кажется, я всегда захожу в isNull, чего не ожидаю.

Я рад изучить это еще немного, но я думаю, что мой вопрос заключается в том, является ли это правильным способом сделать это. Это? Я также видел selectCase в критерииBuilder, так что, возможно, это может быть лучшим решением.

Любые указатели будут приняты с благодарностью.

Спасибо

5
задан RNJ 19 April 2012 в 20:44
поделиться