Jpql выбирает одну максимальную строку из каждой группы

Я относительно новичок в 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, timestamp. Я нашел несколько ресурсов на как этот код будет работать в sql здесь http: // w ww.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/, но мне не удается создать его версию в формате jpql. Помощь будет принята с благодарностью, спасибо.

10
задан Rares Musina 25 November 2010 в 11:06
поделиться