使用Calendar在日期之间进行JPQL查询

时间:2018-04-14 14:37:19

标签: java oracle jpa calendar jpql

我在查询中从一天中提取所有数据时遇到了麻烦。

这是我的日历对象:

2018-04-13T00:00:00.000Z//Fri Apr 13 23:59:59 CEST 2018
2018-04-15T00:00:00.000Z//Sun Apr 15 00:00:00 CEST 2018

这是我的命名查询:

select count(u) from EntityPoll u where pollId = :pollId and FUNCTION('TRUNC', u.requestDate) > :startDate and FUNCTION('TRUNC', u.requestDate) < :endDate

这是我的hibernate生成的sql (返回0个元素)

select count(entitypoll0_.ID) as col_0_0_ from NEOL_ES_POLL entitypoll0_ 
where entitypoll0_.POLL_ID=? 
and trunc(entitypoll0_.REQUEST_DATE)>? 
and trunc(entitypoll0_.REQUEST_DATE)<?

这是相同的查询,但在SQL Developer中执行(5结果,确定)

select count(entitypoll0_.ID) as col_0_0_ from NEOL_ES_POLL entitypoll0_
where entitypoll0_.POLL_ID=1500541052868 
and trunc(entitypoll0_.REQUEST_DATE) > TO_DATE('2018-04-13','yyyy-MM-dd') 
and trunc(entitypoll0_.REQUEST_DATE) < TO_DATE('2018-04-15','yyyy-MM-dd');

无论如何,这最后一个查询有2个~date对象替换我的日历对象,但我找不到结果的差异。

我的道:

Query q = createNamedQuery(EntityPoll.SELECT_BY_POLLID);
        q.setParameter("pollId", pollId);
        q.setParameter("startDate", startDate, TemporalType.DATE);
        q.setParameter("endDate", endDate, TemporalType.DATE);
        try {
            return ((Long) q.getSingleResult()).intValue();

这是我的数据表:

2141777690  1500541052868   14/04/18
2141777750  1500541052868   14/04/18
2141777810  1500541052868   14/04/18
2141777870  1500541052868   14/04/18
2141777930  1500541052868   14/04/18
2141778470  1500541052868   13/04/18
2141778590  1500541052868   13/04/18
2141778980  1500541052868   13/04/18
2141779010  1500541052868   13/04/18
2141779100  1500541052868   13/04/18

1 个答案:

答案 0 :(得分:0)

好的,可能是错的,但是,代码中的一件事让我思考。在设置参数并在oracle中传递to_date时,但在传递to_date(?, 'dd-mm-yyyy')之类的参数时却没有。这里的第一个参数是字符串。至于差异,我不是你做的方式的粉丝。感谢