为了账号安全,请及时绑定邮箱和手机立即绑定

使用版本作为部分主键,如何根据其 id 获取实体的最新版本?

使用版本作为部分主键,如何根据其 id 获取实体的最新版本?

凤凰求蛊 2021-12-01 18:56:36
我有一个由 MySQL 数据库支持的 REST API,它具有多种实体类型,所有实体类型都有一个复合主键:@Embeddablepublic class EntityId {    private int id;    private int version;}对于诸如 /bananas 之类的端点,我想返回每个香蕉的最新版本。鉴于以下情况,我可以退回所有香蕉的所有版本:("SELECT b FROM BananaEntity b").getResultList();其中产生:[  {    entityId: {      id: 1,      version: 1    },    name: "Banana A"  },  {    entityId: {      id: 1,      version: 2    },    name: "Banana A"  },  {    entityId: {      id: 1,      version: 3    },    name: "Banana A"  },  {    entityId: {      id: 2,      version: 1    },    name: "Banana B"  },  {    entityId: {      id: 2,      version: 2    },    name: "Banana B"  },]我怎样才能只检索每个香蕉的最新版本,所以我只能看到香蕉 1 的 V3 和香蕉 2 的 V2?我能够找到获取 id/version 对所需的查询:select id, max(version) from action group by id但是我还没有弄清楚如何获得整个 Banana 实体。我应该改用 Criteria API 吗?有没有更好的方法来版本我的实体?谢谢。
查看完整描述

1 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

我会去子查询。这个想法是。

  1. 使用某些 ID 查找 Banana 的最大版本

  2. 使用该 ID 查找整个 Banana 对象并找到版本。

select b from Banana b where b.version = 
     (select max(bb.version) from Banana bb where bb.id = b.id)


查看完整回答
反对 回复 2021-12-01
  • 1 回答
  • 0 关注
  • 137 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信