Hibernate从数据库中获取对象,其中date等于给定日期

时间:2012-06-15 10:20:50

标签: hibernate date hql

我想在给定的日期时间范围内从数据库中获取对象列表。我如何实现这一目标?这是我目前使用的解决方案,但它不返回任何内容......并且给定的值是正确的。

public List getRegistrationsForUserOnDate(Date startdate, Date enddate){
        Set<Date> dateSet = new HashSet<Date>();
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(enddate);

        while (calendar.getTime().before(startdate))
        {
            Date resultado = calendar.getTime();
            dateSet.add(resultado);
            calendar.add(Calendar.DATE, 1);
        }

        String query = "from Registration where date = '" + Validation.convertToValidDateTime(startdate, true) + "'";
        for(Date date : dateSet){
            query += " AND date = '" + Validation.convertToValidDateTime(date, true)+"'";
        }             
        return em.createQuery(query).getResultList();           
    }

例如:

startdate  = Fri Jun 15 12:07:31 CEST 2012

enddate = Wed Jun 13 12:07:31 CEST 2012 

然后这个方法查询看起来像这样(从调试模式复制的数据):

from TimeRegistration where date = '2012-06-15 00:00:00' AND date = '2012-06-14 00:00:00' AND date = '2012-06-13 00:00:00'

这些是数据库中存在的一些示例字段:

id |       date          |comment|FK|FK|FK
132|"2012-06-08 00:00:00"|    "" | 6| 2| 1
133|"2012-06-15 00:00:00"|    "" | 8| 1| 1
134|"2012-06-14 00:00:00"|    "" | 3| 2| 1
135|"2012-06-13 00:00:00"|    "" | 1| 3| 1

2 个答案:

答案 0 :(得分:0)

日期如何等于两个不同的日期?不要惊讶你没有得到任何东西。

date =&#39; 2012-06-15 00:00:00&#39; AND date =&#39; 2012-06-14 00:00:00&#39; - 所以如果今天的日期是星期四和星期五返回呢?

你是否应该使用OR而不是AND,或者更好的是,使用OR,更大,更小或者介于?

之间
from TimeRegistration where date between '2012-06-13 00:00:00' and '2012-06-15 00:00:00'

答案 1 :(得分:0)

HQL:

from objectname where date in ('date1','date2','date3')

结果:

返回其日期属性等于date1或date2或date3的所有对象。

我现在使用我创建的以下方法,您只需声明一个开始日期和结束日期,它就会获得这两个日期之间日期的所有对象,它就像一个魅力。

public List getRegistrationsForUserOnDate(Date startdate, Date enddate)throws Exception{
        Collection<Date> dateList = new ArrayList<Date>();
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(enddate);

        while (calendar.getTime().before(startdate)){
            Date resultado = calendar.getTime();
            dateList.add(resultado);
            calendar.add(Calendar.DATE, 1);
        }

            String query = "from Registration t where t.date in ('" + Validation.convertToValidDateTime(startdate, true) + "'";
            for(Date date : dateList){
                query += ", '" + Validation.convertToValidDateTime(date, true)+"'";
            }
            query += ")";

            return em.createQuery(query).getResultList();
        }

这是我的Validation.convertToValidDateTime方法源,玩得开心!:

public static String convertToValidDateTime(Date date, boolean clearTime)throws Exception{
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat dateFormatRemoveTime = new SimpleDateFormat("yyyy-MM-dd");
        return clearTime
                ?dateFormat.format(dateFormatRemoveTime.parse(dateFormatRemoveTime.format(date)))
                :dateFormatRemoveTime.format(date);
    }