2012-06-05 42 views
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的是日期时间 例如在orderDateTime OS数据:2012-06-05 0点十二分32秒 2012-06-05 11时34分42秒 2012-04-05 12:32:45

+0

显示我们没有在数据库中的数据,告诉我们orderDateTime列的类型。 –

+0

编辑我的问题,包括你想要的...请参考... – z22

+0

然后Joost的答案是正确的。你的查询测试是否显示错误,如果2012-06-05 == 2012-06-05 13:21:45.765。 –

回答

1

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

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

根据您的数据库系统就可以计算出这些秒(或毫秒,我不知道你的表)使用数据库或者说做java开发

+0

谢谢,但有没有其他方式可用于例如。使用jpa或jpql做同样的事情? – z22

0

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

该方法可能由Oracle函数,java方法。你需要进一步调查。

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();