#spring-boot #jpa #spring-data-jpa
#весенняя загрузка #jpa #spring-data-jpa
Вопрос:
Я использую Spring JPA. У меня есть объект транзакций, транзакция, которую необходимо оплатить. Эти выплаты записываются в другой объект выплаты, PayoutTransaction. Они связаны отношением ManyToMany. Иногда выплаты завершаются неудачно, и они повторяются, добавляя новую запись PayoutTransaction, которая обычно в порядке. Мне нужно получить транзакции с неудачной выплатой, но исключая те неудачные транзакции, которые также имеют выплату OK, поскольку они были успешно оплачены, даже если они потерпели неудачу с первой попытки (у них есть другая запись в объекте PayoutTransaction со статусом OK). Я пробовал это с множественным объединением между обеими таблицами, но оно включает транзакции, даже если они имеют нормальную выплату. (Что, я знаю, является ожидаемым поведением) Как я могу это решить?
SELECT distinct t FROM Transaction t JOIN t.payoutTransactions p JOIN t.payoutTransactions p2 where p.status = 'FAILED' and NOT p2.status = 'OK'
Ответ №1:
Вы можете попробовать EXISTS здесь,
SELECT distinct t FROM Transaction t JOIN t.payoutTransactions p
where p.status = 'FAILED' AND exists (SELECT p2
payoutTransactions p2 where p2.status = p.status and p2.status <> 'OK')
Или вы могли бы даже написать собственный запрос, как показано ниже,
SELECT t.* FROM Transaction t join payoutTransaction p on t.ID = p.ID
where p.status = 'FAILED' AND exists
(SELECT 1 FROM payoutTransaction p2 where p2.status = p.status and p2.status <> 'OK' )
Комментарии:
1. Привет @Govind. Разве это не должно быть «И НЕ существует …», учитывая, что я хочу получить неудачную выплату, у которой нет выплаты OK?