我有一个像这样的简单查询。
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..
答案 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")
)
)
);