我对JPA是相对较新的,我想使用JPQL专门解决以下问题(请注意,我正在使用的实现IS Datanucleus):我有一个版本的实体表,我想为所有实体获得最新版本在表中(即我有一个具有ID的实体类(它唯一标识了一行,一个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获取指定实体ID的实体数据,时间戳。我已经找到了有关此代码在SQL中如何工作的一些资源 http://www.xaprb.com/blog/2006/12/07/how-to-select-the-the-firstleastmax-row-per-per-per-per-group-in-sql/ 但是我无法创建它的JPQL版本。感谢,感谢您将不胜感激。

有帮助吗?

解决方案

如果 timestampS是独特的 entityId, ,您可以写这样的东西:

SELECT e FROM Entity e
WHERE e.timestamp = (SELECT MAX(ee.timestamp) FROM Entity ee WHERE ee.entityId = e.entityId)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top