Hibernate HQL将时间戳比较为null

时间:2016-11-17 18:35:26

标签: java hibernate hql

我有以下HQL,我想知道它如何处理将date列比较为null。例如, givenTime 参数为null时会发生什么。我查了一下,得到了空的结果。总是这样吗?有记录吗?

:h :g
:h :redir
:h :exe
:h :range
:h :new
:h :pu
:h /\zs
:h :le
:h :d

如果将 givenTime 替换为返回null的内部选择查询,该怎么办? 感谢

2 个答案:

答案 0 :(得分:0)

我知道你问过hql,但是为了处理这种情况,我更喜欢在hibernate中使用一个名为Criteria的东西。它可以与SQL轻松混合。

JPA and Hibernate - Criteria vs. JPQL or HQL

Criteria criteria = session
            .createCriteria(MyClassMO.class)
               .add(Restrictions.isNotNull("creationDate"));
if (givenTime!=null){
    criteria.add(Restrictions.ge("creationDate", givenTime));//ge - greater equals
}
List<MyClassMO> result = criteria.list();

答案 1 :(得分:-1)

如果您的参数可以为空,则必须手动管理。

在应用逻辑的基础上,您可以编写查询。

我想一些案例(告诉我你是否是其中之一)。

案例1:不考虑过滤器中的givenTime

您可以查询此查询:

String hql = "select mo from MyClassMO mo" + 
     " where mo.creationDate is not null";

if (givenTime != null) {
    hql += " and mo.creationDate >= (:givenTime)";
}

案例2:如果givenTime为null,则输入当前日期

String hql = "select mo from MyClassMO mo" + 
    " where mo.creationDate is not null " +
    " and mo.creationDate >= COALESCE(:givenTime, current_date())";

案例3:如果givenTime在子查询中返回null,则将当前日期设为

String hql = "select mo from MyClassMO mo" + 
    " where mo.creationDate is not null " +
    " and mo.creationDate >= "
    " (SELECT COALESCE(:giventime, current_date()) " +
    "  FROM yourtable WHERE conditions";