如何使用OpenJPA从DB2数据库中选择前10条记录?

时间:2015-12-20 07:35:20

标签: java db2 openjpa

我正在尝试使用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但没有帮助。

0 个答案:

没有答案