Hibernate HQL查询返回单个最新记录,但查看两个(不是一个)日期列

Hibernate HQL查询返回单个最新记录,但查看两个(不是一个)日期列,hibernate,hql,Hibernate,Hql,我有一个用于存储项目的表,希望接收最近创建或更新的单个记录。该表有一个“创建”日期列和一个“更新”日期列。当然,我可以轻松地分别检索具有最新创建日期的记录和具有最新更新日期的记录,然后在代码中比较两者。但是,部分出于性能原因,我更喜欢使用oneHQL查询,只返回一条记录 我不认为这是一个非同寻常的需求,但谷歌搜索显示没有符合要求的在线示例 顺便说一下,这是我编写的HQL查询,但它有错误。这是我第一次尝试在HQL命名查询中使用grest() 从移动中选择m作为m内部连接获取m.vessel作为v,

我有一个用于存储项目的表,希望接收最近创建或更新的单个记录。该表有一个“创建”日期列和一个“更新”日期列。当然,我可以轻松地分别检索具有最新创建日期的记录和具有最新更新日期的记录,然后在代码中比较两者。但是,部分出于性能原因,我更喜欢使用oneHQL查询,只返回一条记录

我不认为这是一个非同寻常的需求,但谷歌搜索显示没有符合要求的在线示例

顺便说一下,这是我编写的HQL查询,但它有错误。这是我第一次尝试在HQL命名查询中使用
grest()

从移动中选择m作为m内部连接获取m.vessel作为v,其中最大值(m.created,m.updated)和m.status='ACTIVE'和v.id=:vesselId

问候,

克里斯

最大值函数返回列表中的最大值 值或表达式

这是一个很好的开始,您可以使用它对结果进行排序,并将查询限制为一个结果

Select m from Movement as m inner join fetch m.vessel as v where m.status = 'ACTIVE' and v.id = :vesselId order by CASE WHEN  m.updated is null THEN m.created ELSE greatest(m.created, m.updated) END DESC 
最大值函数返回列表中的最大值 值或表达式

这是一个很好的开始,您可以使用它对结果进行排序,并将查询限制为一个结果

Select m from Movement as m inner join fetch m.vessel as v where m.status = 'ACTIVE' and v.id = :vesselId order by CASE WHEN  m.updated is null THEN m.created ELSE greatest(m.created, m.updated) END DESC 

你真的要检查这两个日期吗?是否可以创建更大的日期(表示在之后)然后更新日期?您真的必须同时检查这两个日期吗?可以创建更大的日期(指之后)然后更新日期吗?谢谢Tijkiki,我喜欢你的HQL。在此期间,我创建了以下HQL,除了使用coalesce()函数处理“updated”日期列中的空值外,它基本上与您的HQL相同:“选择m from Movement as m internal join fetch m.vessel as v其中m.status='ACTIVE'和v.id=:vesselId order by maxist(m.created,coalesce(m.updated,'1970-01-01'))描述“谢谢Tijkiki,我喜欢你的HQL。在此期间,我创建了以下HQL,除了使用coalesce()函数处理“updated”日期列中的空值外,它基本上与您的HQL相同:“选择m from Movement as m internal join fetch m.vessel as v其中m.status='ACTIVE'和v.id=:vesselId order by maxist(m.created,coalesce(m.updated,'1970-01-01'))描述“