0

我希望为我的应用程序生成报告,这样的报告需要显示今天给出的订单列表。为此,我在我的 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;
}

我该如何解决?为什么什么都不返回?

编辑: 我使用mysql作为orderDateTime的后端数据类型是DateTime,例如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专栏,并且正在寻找某个日期的帖子。我怀疑这个日期时间列包含自纪元以来的秒数或毫秒数。您无法将时间与日期进行比较,因此您必须将日期转换为时间。实际上有两次描述了这一天。

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

在 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 回答
0

你不能这么简单地使用 Date() 。数据库中保存的日期肯定会有不同的格式。所以最好的办法是首先研究用于持久化数据的方法,然后使用相同的方法取回数据。

该方法可以通过Oracle 函数、java 方法。您需要对此进行进一步调查。

于 2012-06-05T14:12:55.900 回答