2014-02-10 27 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