0

指定された日時範囲の間にデータベースからオブジェクトのリストを取得したい。どうすればそれを達成できますか?これは私が現在使用しているソリューションですが、何も返されません...そして与えられた値は正しいです。

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
4

2 に答える 2

0

日付を2つの異なる日付に等しくするにはどうすればよいですか?何も得られないのも当然です。

date = '2012-06-15 00:00:00' AND date = '2012-06-14 00:00:00'-したがって、今日の日付が木曜日と金曜日の場合は、それを返しますか?

ANDではなくORを使用する必要がありますか、それとも、より大きく、より小さく、またはその間に使用する必要がありますか?

from TimeRegistration where date between '2012-06-13 00:00:00' and '2012-06-15 00:00:00'
于 2012-06-15T10:27:57.003 に答える
0

HQL:

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

結果:

date属性がdate1またはdate2またはdate3に等しいすべてのオブジェクトを返します。

ここでは、開始日と終了日を宣言するだけで、これら2つの日付の間の日付のすべてのオブジェクトを取得し、チャームのように機能する、作成した次のメソッドを使用します。

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);
    }
于 2012-07-18T09:45:27.240 に答える