试试这个
Query query = session.createQuery("select la from LoginActivity la where la.dateLastUpdated > :date");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR, -12);
Date date = cal.getTime();
query.setParameter("date", date);
List result = query.list();
这里有一个较短的例子
Query query = session.createQuery("select la from LoginActivity la where la.dateLastUpdated > :date");
query.setParameter("date", new Date(System.currentTimeMillis() - 12*60*60*1000);
List result = query.list();
编辑
继纪尧姆波莱的例子(upvoted),原来有一个JPA办法做到这一点(比使用数据库供应商特定的SQL函数要好得多)。此代码正在为我工作
String query = "select hour(la.dateLastUpdated) as hour, count (la) from LoginActivity la " +
"where la.dateLastUpdated > :date " +
"group by hour(la.dateLastUpdated) " +
"order by hour(la.dateLastUpdated)";
List<Object[]> objects = getSession().createQuery(query).setParameter("date", date).list();
for (Object[] o : objects) {
Object hour = o[0];
Object count = o[1];
System.out.println(hour + ".00.00 - " + hour + ".59.59\t" + count);
}
它会给在最后12小时中的所有记录的东西。但我的预期结果是每小时计数。它怎么可能是相同的 – fatCop
你说得对,我没有很好地阅读这个问题。我认为原生SQL是唯一的选择,如果我拿出一个工作示例,将更新我的答案。 –
谢谢。本机SQL将为我做。 – fatCop