gpt4 book ai didi

java - Hibernate 查询 - 按时间戳获取最新版本?

转载 作者:行者123 更新时间:2023-11-30 09:55:35 25 4
gpt4 key购买 nike

我有一个用作版本控制系统的数据库。也就是说,我没有更新任何行,而是添加了一个包含相同信息的新行。每行还包含一个 version 列,它是一个日期时间戳,因此唯一的区别是新行将具有更新的时间戳。

我遇到的问题是编写高效的 hibernate 查询以返回这些行的最新版本。例如,这些是名为 Product 的表中的行,带有时间戳的列是 version。表中有多个产品的多个版本。因此,ProductA 可能有多个版本(行),ProductB 有多个版本,等等。我想获取每个版本的最新版本。

我可以只在一个 hibernate 查询中执行此操作吗?

session.createQuery("select product from Product product where...?");

或者这需要一些中间步骤吗?

最佳答案

要回答这个问题,每个产品都需要某种标识符。由于可以有多个版本,我们需要知道“什么是产品”,我假设 product.id 已经出来了,因为这可能是一个代理键。为了示例,我将选择 product.name

这是检索每个产品的最新版本的单个查询:

select p1 from Product p1 where
p1.timestamp >= all (
select p2.timestamp from Product p2 where
p2.name=p1.name
)

(我的 HQL 有点生疏,但我希望你能理解要点。)

诀窍是不同时间戳的相似产品之间的自连接。 p1 产品比 p2 最近修改。要查找最新的 p1,我们会找到没有 p2 值的行 - 即没有比 p1 更新的产品。

编辑:我修改了查询 - 我最近看到有人在论坛帖子中使用了“on”语法,但我现在记得那不是有效的 HQL。抱歉 - 我没有可用于测试的系统。它现在使用功能与 JOIN 相同的相关子查询。

希望这对您有所帮助。

关于java - Hibernate 查询 - 按时间戳获取最新版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2751941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com