命名为JPQL Query和Native SQL Query会生成不同的SUM

时间:2014-11-27 10:19:21

标签: hibernate java-ee jpa named-query

我正在处理以下情况:

实体类:

@NamedQuery(
    name = "Table.getSum",
    query = "SELECT SUM(s.price) FROM Table s WHERE 
        (s.openingDate >= :openingDate AND s.closingDate <= :closingDate)"
)

EJB:

    Calendar openingDate = new GregorianCalendar(year, 1, 1, 0, 0, 0);
    Calendar closingDate = new GregorianCalendar(year, 12, 31, 23, 59, 59);

    BigDecimal salePriceSum = em.createNamedQuery("Table.getSum", BigDecimal.class)
            .setParameter("openingDate", openingDate)
            .setParameter("closingDate", closingDate)
            .getSingleResult();

本机SQL查询:

SELECT SUM(price) FROM Table WHERE openingDate >= 'YYYY-01-01T00:00:00' AND closingDate <= 'YYYY-12-31T23:59:59'

但两笔款项数额相当可观。这让我疯狂。怎么可能?

我正在使用hibernate 4.3.7 with wildfly 8.2.0和当前的mariadb on centos 7。

非常感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

month的构造函数中的

GregorianCalendar参数从零开始,这可能会弄乱您的结果。来自docs

  

month - 用于在日历中设置MONTH日历字段的值。月值基于0。例如,1月份为0。