首页 > 解决方案 > JPQL 查询仅使用日期最大值的记录将 Txn 表与 Account 连接

问题描述

我有一个表 Account{accId, accNo,.... 等等},
我还有另一个表 Txn{txnId,accId,CR_DR,txnAmt,txnDate,...等等}
Txn 可能包含每个帐户的多条记录。

我只想加入每个帐户的 CR_DR="C" 的最新Txn 记录,以及使用 accId 的帐户。

我想使用 JPQL 来做到这一点,任何人都可以提出一个查询。

标签: jpaspring-data-jpajpqljpa-2.1

解决方案


在 JPQL 中组合实体时,您必须映射每个连接链接以允许关系遍历。为此,映射必须反映查询中可能需要的最常见关系。

在您的情况下,我假设您的 Account 实体具有到 Txn 交易的 @OneToMany 映射以及从 Txn 到 Account 的相应 @ManyToOne 映射。所以,你的第一个 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 的所有 EAGERLY 加载的属性,因此可以从中访问帐户。


推荐阅读