jpa - 特定 SQL 到 JPQL 查询转换
问题描述
我在 JPQL 中寻找这个 SQL 查询的等价物
SELECT l.*
FROM product_update l
INNER JOIN (
SELECT
ID_PRODUCT,
MAX(ID) AS maxID
FROM product_update
GROUP BY ID_PRODUCT
) groupel ON l.ID_PRODUCT = groupel.ID_PRODUCT
AND l.ID = groupel.maxID
ORDER BY ID DESC
我的java类
public class ProductUpdate extends BaseEntity {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PRODUCT_UPDATE_SEQUENCE")
@Column(name = "ID")
private Long id;
@JoinColumn(name = "ID_PRODUCT")
@ManyToOne()
private Product product;
@JoinColumn(name = "ID_VERSION")
@ManyToOne()
private Versioning versioning;
}
实际上,一个产品可能有多个版本,但系统只显示具有 max (id) 的产品示例:
1-Product 1 --- Version 1
2-Product 2 --- Version 1
3-Product 3 --- Version 1
4-Product 1 --- Version 2
5-Product 3 --- Version 2
6-Product 3 --- Version 3
查询刚出来
2-Product 2 --- Version 1
4-Product 1 --- Version 2
6-Product 3 --- Version 3
感谢。
解决方案
我终于得到了很好的查询,
select pu from ProductUpdate pu where pu.id in (select MAX(pUd.id) from ProductUpdate pUd group by pUd.product.id) ORDER BY pu.id DESC.
我只是使用这篇文章JPA CriteriaBuilder 来加入子查询来执行我的答案。
- 使用 JPA 子查询仅在 WHERE 中定位,因此 Netbeans 警告
- JPA 中的 INNER JOIN 不接受子查询。
推荐阅读
- javascript - 当我添加命中检测时,我的画布消失了
- python - 如何创建一个检查网站可用性的python函数?
- java - Maven如何忽略工件描述符?
- android - 有没有办法使用 adb 获取设备名称?例如,如果设备名称是 John Doe 的 Nexus,如何使用命令获取名称?
- git - Gitflow:合并修补程序分支以进行开发携带对主控的合并提交
- junit - Cucumber 报告以“When”而不是“Given”开头
- java - 无法使用 java jackson 更新 json 文件
- animation - 如何为可扩展的 Flutter 小部件设置动画以将其滑出屏幕
- firebase - Firebase FCM — 对普通 Web 推送协议的可移植性?
- c - 使用 `read` 和 `epoll` 异步读取套接字