我编写正确的SQL查询:

SELECT i, (i.sme_end - '2015-09-10')
FROM Incidents i
WHERE (i.sme_end - '2015-09-10') <= 100
ORDER BY ('2015-09-10' - i.sme_end)

但是当我在HQL上重写这个查询时:
java.util.Date currentDate = new java.util.Date(System.currentTimeMillis());
int days = 100;
session.createQuery("SELECT i, (i.smeEnd - :currentDate) "+
                "FROM IncidentsEntity i " +
                "WHERE (i.smeEnd - :currentDate) <= :days " +
                "ORDER BY (i.smeEnd - :currentDate)")
                .setParameter("days", days)
                .setParameter("currentDate", currentDate);

我得到ClassCastException:java.lang.Integer不能转换为java.util.Date
我错在哪里?
数据库Postgresql 9.4

最佳答案

要在where子句中将(i.smeEnd-:currentDate)转换为整数的托盘
(i.smeEnd-:当前日期)::整数或者是演员。。。
转换((i.smeEnd-:currentDate)为整数)如果我没有错的话,不久前我的大学也发生了类似的事情。java检查传递的参数条件时,它会检查其他数据类型的“:currentDate)但希望能帮上忙
2015-11-06编辑
抱歉,无法评论,但没有足够的尊重点:)
来回答你的问题
“cast((i.smeEnd-:currentDate)作为整数)和EXTRACT(EPOCH FROM date_trunc('day',age(i.smeEnd,:currentDate))/60/60/24之间有什么不同?两种变体正在工作”
您必须理解,这两种方法都在工作,因为查询语法不同。
java出现问题(hibernate?)查询解析器有点“聪明”,预先检查查询是否正常,它在查询中找到一个有两个参数的条件:currentDate)如果您在“:currentDate[此处]”或“[此处](i.smeEnd-:当前日期)到
(-:当前日期+i.smeEnd)这个问题也能解决

关于java - HQL diff 2日期(天),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33517167/

10-10 12:56
查看更多