我正在尝试使用OpenJPA从DB2数据库中选择TOP 10记录。我正在尝试获取查询中指定的结果:
SELECT * FROM CACHE_REFRESH_TABLE FETCH FIRST 10 ROWS ONLY
为此,我在我的persistence.xml
中启用了以下属性。
<property name="openjpa.jdbc.DBDictionary" value="db2(SupportsSelectStartIndex=true,SupportsSelectEndIndex=true)"/>
但是在启用该属性之后,它会引发其他简单SELECT查询的异常,如我所提到的here。
我用来检索TOP 10记录的Java代码如下。但它不起作用,因为它将SELECT形成SELECT TOP 10 FROM CACHE_REFRESH_TABLE
而不是
SELECT * FROM CACHE_REFRESH_TABLE FETCH FIRST 10 ROWS ONLY
以下是Java代码。
public List<CacheHistoryOTO> fetchRefreshHistory(
int someInput1, String someInput2) throws SomeException {
LOGGER.info(EventMessages.METH_START, "fetchRefreshHistory");
List<CacheHistoryOTO> cacheHistoryOTOList = null;
try {
EntityManager entityManager = entityManagerProvider
.getEntityManager();
final Query query = entityManager
.createNamedQuery("topHistoryRecords");
query.setMaxResults(someInput1);//Depending on parameter someInput1 number of records to be fetched will be provided.
cacheHistoryOTOList = (List<CacheHistoryOTO>) query
.getResultList();
} catch (Exception e) {
LOGGER.error(EventMessages.ERROR, e);
throw new SomeException(Constant.ERROR_PERSISTENCE, e);
}
LOGGER.info(EventMessages.METH_END, "fetchRefreshHistory");
return cacheHistoryOTOList;
}
命名查询声明如下。
@NamedQueries({
@NamedQuery(name = "topHistoryRecords", query = "SELECT cacheRefreshHistoryOTO FROM CacheHistoryOTO cacheRefreshHistoryOTO ORDER BY cacheRefreshHistoryOTO.refreshTimeStamp DESC")
})
有人可以建议使用正确的方法吗?
我看过JPA 2 CriteriaQuery, using a limit但没有帮助。