0

アプリケーションのレポートを生成したいのですが、そのようなレポートの1つでは、本日提供された注文のリストを表示する必要があります。そのために、私はejbに次のメソッドを持っています。これは何も返しません(デバッグされて見つかった):

public Collection<OrderStock> getOrderReport(String userName) {
   String strQuery = null;
    strQuery = "Select o from OrderStock o where o.userName.userName = :userName and o.orderDateTime = :orderDateTime";

     Collection<OrderStock> c = em.createQuery(strQuery).setParameter("userName",userName).setParameter("orderDateTime", new Date(),TemporalType.DATE).getResultList();

   return c;
}

どうすれば解決できますか?なぜ何も返さないのですか?

編集済み: orderDateTimeのバックエンドデータ型としてmysqlを使用しています。例:orderDateTimeのosデータ:2012-06-05 00:12:32 2012-06-05 11:34:42 2012-04-05 12:32:45

4

3 に答える 3

1

あなたはDateTimeコラムを持っていて、単一の日付の投稿を探しています。この日時列には、エポック以降の秒またはミリ秒が含まれていると思われます。時間と日付を比較することはできないため、日を時間に変換する必要があります。実際にはその日を表す2回。

SELECT o 
FROM OrderStock o 
WHERE 
    o.userName.userName = :userName 
    AND (
        o.orderDateTime >= FirstSecondOfTheDay
        OR o.orderDateTime <= LastSecondOfTheDay
    )

データベースシステムに応じて、データベースを使用してこれらの秒(またはミリ秒、テーブルがわかりません)を計算するか、Javaで計算できます。

于 2012-06-05T14:03:00.573 に答える
0

それほど単純なDate()を使用することはできません。DBに保持される日付は、間違いなく異なる形式になります。したがって、最善の方法は、最初にデータを永続化するために使用されるメソッドを調べ、同じメソッドを使用してデータをフェッチすることです。

メソッドは、Oracle関数、javaメソッドによる場合があります。これについてさらに調査する必要があります。

于 2012-06-05T14:12:55.900 に答える
0

MySQLでこれを試してください:

strQuery = "Select o from OrderStock o where o.user.userName = :userName and date(o.orderDateTime) = :orderDateTime";

Date today = DateUtils.truncate(new Date(), Calendar.DATE);

Collection<OrderStock> c = em.createQuery(strQuery).setParameter("userName",userName).setParameter("orderDateTime", today ,TemporalType.DATE).getResultList();
于 2012-06-05T14:18:24.617 に答える