2

列 submit_date(time-stamp without timezone) を持つテーブルが 1 つあります。提出日として特定の日付を持つテーブル内のすべてのレコードを一覧表示する必要があります。ただし、データベースの時間を考慮しないでください。条件クエリと休止状態を使用してレコードを取得します。ここで時間を無視するには?

実際には、クライアント側から日付を渡し、submit_date と同じ日付を持つレコードを取得する必要があります。しかし、時間を考慮する必要はありません。

    else if(extjsFilter.getField().equals("submittedDate")) {
                            String str_date=extjsFilter.getValue(); 
                            SimpleDateFormat format1 = new SimpleDateFormat("MM/dd/yyyy");
                            SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd");
                            Date date2 = format1.parse(str_date);
                            String datenew = format2.format(date2);
                            Date date = (Date)format2.parse(datenew);

                            if(extjsFilter.getType().equals("date"))
                            {
                                if(extjsFilter.getComparison().equals("gt"))
                                {
                                    Filter postDateFilterGT = getSession().enableFilter("jobFilterPostDateGT");
                                    postDateFilterGT.setParameter("postDateFilterGT", date);
                                }
                                if(extjsFilter.getComparison().equals("lt"))
                                {
                                    Filter postDateFilterLT = getSession().enableFilter("jobFilterPostDateLT");
                                    postDateFilterLT.setParameter("postDateFilterLT", date);
                                }
                                if(extjsFilter.getComparison().equals("eq"))
                                {
                                    Filter postDateFilterEQ = getSession().enableFilter("jobFilterPostDateEQ");
                                    postDateFilterEQ.setParameter("postDateFilterEQ", date);
                                }
                            }
}

上記は私のコードです。クライアント側は extjs を使用して行われます。1 つの日付フィールドに対する extjs フィルタリングのサーバー側コードは次のとおりです。

休止状態を以下に示します。

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.hiringsteps.ats.job.domain">
    <class
        name="Job"
        table="hs_job_master"> 

        <id name="id" column="job_id" unsaved-value="null">
            <generator class="sequence">
                <param name="sequence">hs_job_id_seq</param>
            </generator>
        </id>

        <property name="submittedDate" column="submitted_date"/>                

        <filter name="jobFilterPostDateGT"><![CDATA[submitted_date > :postDateFilterGT]]></filter>
        <filter name="jobFilterPostDateLT"><![CDATA[submitted_date < :postDateFilterLT]]></filter>
        <filter name="jobFilterPostDateEQ"><![CDATA[:postDateFilterEQ = submitted_date]]></filter>  
    </class>    

    <filter-def name="jobFilterPostDateGT">
        <filter-param name="postDateFilterGT" type="date"/>
    </filter-def>
    <filter-def name="jobFilterPostDateLT">
        <filter-param name="postDateFilterLT" type="date"/>
    </filter-def>
    <filter-def name="jobFilterPostDateEQ">
        <filter-param name="postDateFilterEQ" type="date"/>
    </filter-def>
</hibernate-mapping>

以下のように、submit_date を持つデータベースに 2 つのレコードがあります。

2013-02-15 00:00:00

2013-02-15 13:04:42.787

日付が今日のレコードをフィルターするクエリを作成すると、送信日が 2013-02-15 00:00:00 の最初のレコードのみが取得されます。

これは、クエリに使用した日付オブジェクトにもこの値「2013-02-15 00:00:00」があるためです。

時間部分を無視するクエリを作成するにはどうすればよいですか?

4

3 に答える 3

5

このためには、submitDate と submitDate+1 の間のすべての日付を選択する制限を適用する必要があります。

//Resticts the dates between start date 0000 hrs and end date 0000 hrs
criteria.add(Restrictions.ge("startDate", sDate)); 
criteria.add(Restrictions.lt("endDate", eDate));

あなたの場合、開始日 = 2013-02-15 および終了日 = 2013-02-16

于 2013-02-15T08:12:14.037 に答える
1

列submited_dateに対応するプロパティの基準に制限を追加するだけです。あなたはそれを次のように書くことができます

criteria.add(Restrictions.eq("submittedDate"), '2013-02-15');
于 2013-02-15T07:12:43.953 に答える