Я относительно новичок в JPA и хотел бы решить следующую проблему, используя исключительно jpql (обратите внимание, что я использую реализацию Datanucleus): у меня есть таблица версионных сущностей, и я хотел бы получить последнюю версию для всех сущностей в таблице (т. е. у меня есть класс сущностей, у которого есть идентификатор (который однозначно идентифицирует строку, entityId (который идентифицирует саму сущность во всех версиях) и метку времени; я хотел бы получить сущность последней версии для всех entityId). Мой текущий код выглядит следующим образом:
String innerQueryString = "SELECT entity.entityId, max(entity.timestamp) " +
"FROM Entity entity" +
"GROUP BY entity.entityId";
Query getQuery = getEntityManager().createQuery(innerQueryString);
List<Object[]> queryRes = getQuery.getResultList();
List<IEntity> ret = new ArrayList<IEntity>();
for (Object[] res : queryRes) {
ret.add(getEntity((Long)res[0], (Date)res[1]));
}
return ret;
Где getEntity получает данные объекта для указанного entityId, отметки времени. Я нашел несколько ресурсов о том, как этот код будет работать в SQL здесь http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/, но мне не удается создать его версию jpql. Помощь будет принята с благодарностью, спасибо.