猿问

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

我有一个由 MySQL 数据库支持的 REST API,它具有多种实体类型,所有实体类型都有一个复合主键:


@Embeddable

public 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 吗?有没有更好的方法来版本我的实体?谢谢。


凤凰求蛊
浏览 138回答 1
1回答

守着一只汪

我会去子查询。这个想法是。使用某些 ID 查找 Banana 的最大版本使用该 ID 查找整个 Banana 对象并找到版本。select b from Banana b where b.version =       (select max(bb.version) from Banana bb where bb.id = b.id)
随时随地看视频慕课网APP

相关分类

Java
我要回答