错误无法在JPA中找到名为[total_recods]的参数

时间:2015-01-18 13:25:11

标签: java sql hibernate jpa orm

我想在此方法getDataCount()上返回来自" total_recods"(查询类型)的整数。如何将total_recods作为整数? 我编辑我的代码,但是当我在我的数据库中有一些数据时,它返回0。

@Override
    public int getDataCount() {
        // TODO Auto-generated method stub

        Query query=null;
        int count=0;

        try {
            query= em.createNativeQuery("SELECT count(*) AS total_recods FROM Data");
            count = ((Number) query.getSingleResult()).intValue();

           logger.info(Logger.EVENT_SUCCESS,count);
        } catch (Exception e) {
            logger.error(Logger.EVENT_FAILURE, e.getMessage());

        }

         return count;

    }

解决问题后,代码如下: 提示:计数sholud的类型很长

@Override
public long getDataCount() {
    // TODO Auto-generated method stub

    long count=0;

    try {
        count = (long)em.createQuery("select count(*) from Data")
                .getSingleResult();

    } catch (Exception e) {
        logger.error(Logger.EVENT_FAILURE, e.getMessage());

    }

     return count;

}

3 个答案:

答案 0 :(得分:1)

你放弃了结果。这就是你应该这样做的方式:

query= em.createNativeQuery("SELECT count(*) FROM Data");
int count = ((Number) query.getSingleResult()).intValue();

注意到我使用了Number,因为某些数据库返回Long而其他数据库返回BigDecimal

答案 1 :(得分:0)

您可以写query.getParameter("total_recods",Integer.class);

有关详细信息,请阅读此http://docs.oracle.com/javaee/6/api/javax/persistence/Query.html#getParameter%28java.lang.String,%20java.lang.Class%29

答案 2 :(得分:0)

查询没有名为 total_recods 的PARAMETER。它是一个没有参数的NATIVE查询。 JPQL可以有(命名)PARAMETERS。这是SQL,仅使用NUMBERED PARAMETERS(而且您的SQL没有任何参数)。

如果您想获得查询结果,请查看query.getSingleResult返回值!