Java Hibernate基于属性可空性的条件判据是否可行?

时间:2017-04-10 12:28:16

标签: java hibernate

我有一个像这样的简单查询。

select id,status,c01,c02,c03 from mytable
where 
criterion1 
and criterion2 
and criterion3

我需要添加另一个这样的过滤器

//In Java
if(mytable.status=1){
  criteria.add(Restrictions.eq("anotherFilter",anotherFilterValue));
}   

但状态值来自查询我的意思是我可以在内存中过滤但我希望能够直接在DB中过滤

就像使用案例的排序一样,我可以用一些方法来制作吗?

select id,status,c01,c02,c03 from mytable
where 
 criterion1 = ?
 and criterion2 = ? 
 and criterion3 = ?
 and
 case status is null 
     ? anotherFilter = :valueToFilter 
     : 1=1//IS NOT NULL NOTHING TO DO..

1 个答案:

答案 0 :(得分:1)

这可以帮到你。

select id,status,c01,c02,c03 from mytable
  where 
    criterion1 = ?
    and criterion2 = ? 
    and criterion3 = ?
    and 
       ((status is null and anotherFilter = :valueToFilter) 
       or (status is not null))

对于标准api

//In Java
criteria.add(
    Restrictions.or(
         Restrictions.isNotNull("status"),
         Restrictions.and(
           Restrictions.eq("anotherFilter",anotherFilterValue),
           Restrictions.isNull("status")
         )
    )
);