JPQL Запрос на присоединение таблицы Txn к учетной записи только с использованием записей с максимальным значением даты - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть таблица Account {accId, accNo, .... и так далее}, У меня также есть другая таблица Txn {txnId, accId, CR_DR, txnAmt, txnDate, ... и так далее} Txn может содержать несколько записей для каждой учетной записи. Я хочу присоединиться только к самой последней записи Txn с CR_DR = "C" каждой учетной записи вместе с этой учетной записью с использованием accId. Я хочу сделать это с помощью JPQL, может кто-нибудь, пожалуйста, предложите запрос.

1 Ответ

0 голосов
/ 07 апреля 2020

При объединении сущностей в JPQL необходимо сопоставить каждую присоединяющуюся ссылку, чтобы разрешить обход отношений. Для этого сопоставление должно отражать наиболее распространенные отношения, которые могут потребоваться в запросах.

В вашем случае я предполагаю, что ваша сущность Account имеет сопоставление @OneToMany с транзакциями Txn и соответствующее сопоставление @ManyToOne из Txn на счет. Итак, ваш первый JPQL может быть записан как:

SELECT txn FROM Txn AS txn WHERE txn.account = :acct AND txn.crdr = :crdr

Этот запрос вернет все транзакции с заданными: acct и: crdr в виде списка.

При условии, что ваше поле txnDate может быть упорядочено, вы можете упорядочить список по дате и ограничить результат с помощью операторов ORDER BY и LIMIT JPQL:

SELECT txn FROM Txn AS txn WHERE txn.account = :acct AND txn.crdr = :crdr ORDER BY txn.txnDate DESC LIMIT 1

Поскольку Txn имеет отображение @ManyToOne на учетная запись, результат, если он существует, позволит вам получить все ранее загруженные свойства Txn, поэтому к нему можно получить доступ из учетной записи.

...