0

我有一个表,其中有两个表示日期的时间戳列,effectiveexpiration需要获取当前时间戳落在这两个日期列中的那些行。

这可以通过将条件放入 SQL 查询中来完成,如下所示
effectiveDate <= current_timestamp and current_timestamp < expirationDate

expirationDate问题是如果不为空,则要满足上述条件。如果它为空,那么只会
effectiveDate <= current_timestamp被检查。

我猜这是一种动态 SQL。我在项目中使用 Hibernate。我可以使用任何标准 API 或 HQL 或 SQL 任何东西。

请让我知道如何做到这一点。

4

2 回答 2

1

Your first version is not quite SQL. But what you want is something like:

where effectiveDate <= current_timestamp and
      (expirationDate is NULL or current_timestamp < expirationDate)
于 2013-04-22T18:25:20.440 回答
0

您想要的 SQL 没有什么动态的。尝试这个:

Criteria c = sf.getCurrentSession().createCriteria(MyObject.class)
    .add(Restrictions.lt("effectiveDate",dateArgument))
    .add(Restrictions.or(
        Restrictions.isNull("expirationDate"),
        Restrictions.gt("expirationDate",dateArgument)));

调用c.list()将返回每MyObject一个effectiveDate小于给定日期并且也有一个expirationDate大于null或大于给定日期的日期。

只要您不介意使用 Hibernate Criteria Queries,就应该给您想要的东西。

注意:根据您的具体要求随意交换.lt(...).gt(...)使用。.le(...).ge(...)

于 2013-04-22T18:56:49.147 回答