Оператор jpql, включающий несколько условийJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Оператор jpql, включающий несколько условий

Сообщение Anonymous »

Я использую планировщик для подбора задач из базы данных на основе статуса связанного документа. У меня есть связь между одной задачей и многими документами, и каждый объект документа имеет свое собственное значение статуса.
Мне нужно выбрать из документа одну отдельную задачу со следующими критериями:
  • статус 101: получить максимальную версию документа
  • статус 102: получить любую, независимо от того, какая это версия (и предпочесть 102, а не 101)
Для этого я использую этот JPQL:

Код: Выделить всё

select task, document.id
from Task task
join Document document on task.uuid = document.taskUuid
where (
document.status = 102
or (document.status = 101
and document.wersjaNumer =
(select max(sub.wersjaNumer) from Document sub
where sub.numerUuid = document.numerUuid)
)
)
order by case when document.status=102 then 1 else 2 end
Насколько я понимаю, это должно получить только один экземпляр задачи с заданным uuid.
Итак, здесь:

Код: Выделить всё

Task(uuid = "xxx")
Document(taskUuid = "xxx", status=101)
Document(taskUuid = "xxx", status=102)
Я ожидаю, что только одна задача и document.id связаны со статусом = 102, но я получаю оба результата. Я подозреваю, что у меня что-то не так
order by case when document.status=102 then 1 else 2 end часть. Есть идеи, как это исправить?

Подробнее здесь: https://stackoverflow.com/questions/797 ... conditions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»