根据今天的日期获取记录

时间:2012-06-05 13:39:06

标签: java java-ee jpa

我希望为我的应用程序生成报告,其中一份报告要求显示今天给出的订单列表。为此我在我的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 例如,os数据在orderDateTime:2012-06-05 00:12:32                               2012-06-05 11:34:42                               2012-04-05 12:32:45

3 个答案:

答案 0 :(得分:1)

您有DateTime列,并且正在查找单个日期的帖子。我怀疑这个日期时间列包含自纪元以来的秒或毫秒。您无法将时间与日期进行比较,因此您必须将当天转换为时间。实际上有两次描述了这一天。

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

根据您的数据库系统,您可以使用数据库计算这些秒(或毫秒,我不知道您的表),或者在java中计算

答案 1 :(得分:0)

你不能使用Date()这么简单。数据库中保留的日期肯定会有不同的格式。因此,最好的方法是首先查看用于保存数据的方法,并使用相同的方法来获取数据。

该方法可能由Oracle函数,java方法实现。您需要进一步调查此内容。

答案 2 :(得分: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();