2014-02-10 81 views
1

我有一個使用休眠與postgres數據庫交談的grails項目。我正在使用joda時間插件。我一直在使用他們的DateTime格式2013-01-25 22:28:55來存儲日期。我需要知道什麼時候兩週前發生了一些事情,因爲變量爲deadline需要幫助查詢數據庫到今天的日期,而忽略時間

import org.joda.time.DateTime 

Collection<PerformanceReview> outstandingSelfEvaluations(DateTime deadline) { 
    Person.executeQuery("select pr from PerformanceReview as pr \ 
        inner join pr.performanceReviewStatus as status \ 
        where status.name in (:name) \ 
        and pr.employeeEvaluation = null \ 
        and pr.dateCreated = :deadline", 
      [name: ['Open', 'New'], deadline: deadline]) 
} 

主要功能

def incompleteSelfEvaluations(Integer days) { 
    def deadline = LocalDate.now().minusDays(days) 
    def performanceEvaluations = outstandingSelfEvaluations(deadline) 

    performanceEvaluations.each { PerformanceReview pr -> 
     sendSelfEvaluationReminderEmail(pr, evaluationDeadline) 
    } 
} 

唯一的問題是,我不知道如何檢查只是日期而忽略了時間。

編輯:添加了所有相關的代碼,並刪除,這不是這個特殊問題有用的錯誤消息

+0

看起來像您的導入包是不同的。請糾正這一點。 – user1791574

+0

我刪除了該錯誤消息,它與我試圖實現的內容無關。正如你所說,我正在使用不同的進口包 – paul

回答

0

它看起來像很多噪音,但使用DAYMONTHYEAR Hibernate的功能運作良好。您可以在documentation瞭解更多有關這些功能的信息。這樣你就不用擔心傳遞額外的信息,而且它與數據庫無關。

Collection<PerformanceReview> outstandingSelfEvaluations(LocalDate deadline) { 
    Person.executeQuery("select pr from PerformanceReview as pr \ 
        inner join pr.performanceReviewStatus as status \ 
        where status.name in (:name) \ 
        and pr.employeeEvaluation = null \ 
        and DAY(pr.dateCreated) = DAY(:deadline) 
        and MONTH(pr.dateCreated) = MONTH(:deadline) 
        and YEAR(pr.dateCreated) = YEAR(:deadline)", 
      [name: ['Open', 'New'], deadline: deadline]) 
+0

謝謝你會的,非常感謝答案 – paul

1

我不知道是否有一個更簡單的方法,但有辦法做到這將是使用兩個參數(一個開始時間和一個結束時間),然後在查詢中使用的>=<運營商,如:在午夜

... 
and pr.dateCreated >= :startTime and pr.dateCreated < :endTime 

然後調用代碼設置startTime到截止日期,並且你設置了endTime到午夜截止日期的第二天。

+0

不是一個壞主意,如果我找不到更簡單的解決方案,我會與此一起去。 – paul