2012-06-05 45 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();