我希望为我的应用程序生成报告,其中一份报告要求显示今天给出的订单列表。为此我在我的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
答案 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();