У меня есть следующая объектная модель:
Account
AccountTransaction
has many-to-one to Account
PaymentSchedulePayment
has many-to-one to AccountTransaction
PaymentSchedulePeriod
has many-to-one to Account
И я хочу, чтобы некоторые HQL
нашли меня всех PaymentSchedulePeriod
активными в данную дату, и для каждой из них была найдена последняя PaymentSchedulePayment
, связаннаяна тот же счет.Платежи, возможно, не осуществляются, поэтому внешнее соединение.
У меня есть запрос, который работает нормально:
select p.id, a.id, max( pay.accountTransaction.dttm )
from PaymentSchedulePayment pay right join pay.accountTransaction.account a,
PaymentSchedulePeriod p
where p.account = a
and p.fromDttm <= :date and p.toDttm > :date
group by p.id, a.id
Однако с этот вопрос У меня ранее были проблемы из-запорядок упорядочения соединений, который был объяснен в принятом ответе.Один из комментариев состоял в том, что во избежание подобных проблем я должен использовать левое внешнее соединение вместо правого, но я не уверен, как переписать мой HQL
в форму
from Account left join ... PaymentSchedulePayment
Мое, возможно, неполное, понимание того, что в HQL вы можете выполнять только внешние объединения через объектную модель.
Может кто-нибудь подсказать, как я могу переписать вышеприведенное, как предлагалось, используя левое, а не правое соединение?*