基于Hibernate中的某些条件,在两个日期列中的日期

时间:2013-04-22 18:22:27

标签: java sql hibernate timestamp

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

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

问题是如果expirationDate不为空,则满足上述条件。如果它为null,则只有
将检查effectiveDate <= current_timestamp

我想这是一种动态SQL。我在项目中使用Hibernate。我可以使用critera API或HQL或SQL。

请告诉我如何做到这一点。

2 个答案:

答案 0 :(得分:1)

您的第一个版本不是SQL。但你想要的是:

where effectiveDate <= current_timestamp and
      (expirationDate is NULL or current_timestamp < expirationDate)

答案 1 :(得分: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 AND 还有一个null即{ {1}}或大于给定日期。

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

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