我有以下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的内部选择查询,该怎么办? 感谢
答案 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";