Переписываем HQL для преобразования правого соединения в левое соединение - PullRequest
2 голосов
/ 25 января 2011

У меня есть следующая объектная модель:

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 вы можете выполнять только внешние объединения через объектную модель.

Может кто-нибудь подсказать, как я могу переписать вышеприведенное, как предлагалось, используя левое, а не правое соединение?*

...