我对JPA比较陌生,我想独家使用jpql解决以下问题(注意我使用的实现是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;
Run Code Online (Sandbox Code Playgroud)
其中getEntity获取指定entityId的实体数据,即时间戳.我已经找到了几个关于这段代码如何在sql中工作的资源http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in- sql /但我无法设法创建它的jpql版本.非常感谢帮助,谢谢.