Используя версию как частичный первичный ключ, как получить последнюю версию сущности с указанным идентификатором? - PullRequest
0 голосов
/ 22 октября 2018

У меня есть REST API, поддерживаемый БД MySQL с несколькими типами сущностей, каждый из которых имеет составной первичный ключ:

@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"
  },
]

Как я могу вместо этого получить только последнюю версию каждого банана, такЯ вижу только V3 Banana 1 и V2 Banana 2?Мне удалось найти запрос, который мне нужен, чтобы получить пары id / version:

select id, max(version) from action group by id

Но я еще не выяснил, как получить все сущности Banana.Должен ли я вместо этого использовать Criteria API?Есть ли лучший способ для версии моих сущностей?Спасибо.

1 Ответ

0 голосов
/ 23 октября 2018

Я бы пошел на подзапрос.Идея такова.

  1. Найти максимальную версию банана с некоторым идентификатором
  2. Найти весь объект банана с этим идентификатором и найденной версией.
select b from Banana b where b.version = 
     (select max(bb.version) from Banana bb where bb.id = b.id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...