Jpa QueryBuilder Несколько выражений в предложении where не работают

У меня проблема с созданием запросов с помощью javax.persistence.criteria.CriteriaBuilder. Я использую EclipseLink 2.1 и базу данных Oracle 10g. При построении запроса с несколькими ограничениями он будет использовать только первое ограничение, а не оба.

Вот мой код:

CriteriaBuilder cb = getEm().getCriteriaBuilder();
CriteriaQuery<Assignment> query = cb.createQuery(Assignment.class);
Root<Assignment> assignment = query.from(Assignment.class);

query.where(
    cb.equal(assignment.get("request"), request),
    cb.isNull(assignment.get("endDate")));

return getEm().createQuery(query).getResultList();

Производится следующий запрос:

SELECT ASSX_ID, END_DATE, BEGIN_DATE, COMMENTS, 
       ASSX_OER_ASSIGNED_TO_ID, OER_OER_ID_ASSIGNED_BY, 
       ASSX_RQST_ID 
FROM TARTS.ASSIGNMENT_XREF 
WHERE (ASSX_RQST_ID = ?)

Выглядит хорошо, за исключением предложения where. Я ожидаю:

SELECT ASSX_ID, END_DATE, BEGIN_DATE, COMMENTS, 
       ASSX_OER_ASSIGNED_TO_ID, OER_OER_ID_ASSIGNED_BY, 
       ASSX_RQST_ID FROM TARTS.ASSIGNMENT_XREF 
WHERE (ASSX_RQST_ID = ? AND BEGIN_DATE IS NOT NULL)

Неважно, использую я cb.and (arg1, arg2) или нет. Я делаю что-то неправильно? Любая помощь будет оценена по достоинству.


person Miller    schedule 04.07.2011    source источник
comment
Ваш cb.isNull должен быть isNotNull. Вы пытались добавить больше ограничений и / или пытались явно определить ваше соединение?   -  person jelle    schedule 06.07.2011


Ответы (1)


Ваш запрос выглядит нормально. Как вы упомянули, CriteriaQuery.where(Predicate... restrictions) уже использует соединение предикатов, поэтому нет необходимости использовать cb.and ().

Единственное, что я мог представить:

  • ошибка в EclipseLink (попробуйте то же самое с Hibernate)
  • какая-то оптимизация, может endDate никогда не будет нулевым?
  • ваш метод getEm () делает некоторые странные вещи
person Robin    schedule 06.07.2011
comment
После долгих исследований я обнаружил ошибку bugs.eclipse.org/bugs/show_bug.cgi ? id = 316144 в EclipseLink именно с этой проблемой. После обновления до 2.3 он работает ОТЛИЧНО! - person Miller; 24.07.2011