Mysql 在HQL中添加并比较日期和时间

Mysql 在HQL中添加并比较日期和时间,mysql,sql,hibernate,datetime,hql,Mysql,Sql,Hibernate,Datetime,Hql,我已经为我的代码创建了以下sql查询,我需要将其转换为HQL createQuery,我做了很多尝试。任何人请告诉我如何添加datetime来查询自身和比较 Query query = session.createSQLQuery("select * from schedule s where NOW() >= ADDDATE(s.view_datetime, INTERVAL 2 HOUR)"); 经过多次变通,我得到了答案。它可能会帮助其他寻找类似塞纳里奥的人 Calenda

我已经为我的代码创建了以下sql查询,我需要将其转换为HQL createQuery,我做了很多尝试。任何人请告诉我如何添加datetime来查询自身和比较

Query query = session.createSQLQuery("select * from schedule s
    where NOW() >= ADDDATE(s.view_datetime, INTERVAL 2 HOUR)");

经过多次变通,我得到了答案。它可能会帮助其他寻找类似塞纳里奥的人

Calendar calendar = new GregorianCalendar();
calendar.setTime(new Date());       
Date today = calendar.getTime(); 

Query query = session.createQuery("from schedule s where DATE(s.view_datetime) <= :today AND (hour(CURRENT_TIMESTAMP() - s.view_datetime) >= 2)");
Calendar=new gregoriacalendar();
calendar.setTime(新日期());
Date today=calendar.getTime();
Query Query=session.createQuery(“从计划s,其中日期(s.view_datetime)=2)”;

HQL并不真正支持特定于数据库的日期函数(因为每个数据库的日期函数通常不同)。但是,您可以从Java代码中将上述内容作为原始MySQL查询运行。您好,谢谢您的回复。它正在工作,但我需要处理hql。还有其他的可能性吗?还有其他的解决方案吗?我不知道,如果您获得
NOW()
作为UNIX时间戳,您可以将其与添加了7200秒的相同值进行比较。UNIX时间戳只是数字,比较它们必须起作用。感谢@TimBiegeleisen,我将尝试一下。如何将sqlquery列表的输出转换为java对象(createQuery().list和createSQLQuery().list的输出不同),这在Hibernate上似乎不起作用。hour函数的某些时间返回NULL。。可能是因为您不允许在两个日期的差异上应用小时函数,而只能在限定日期上应用小时函数。更多信息可以在这里找到:(请注意这篇文章的解决方案也是错误的)。。