Disjunction和Conjunction是逻辑或和逻辑与,可以用这个来构造复杂的SQL查询条件,实例如下:
private void CheckBsc_lj(Criteria queryCriteria)
{
Disjunction disjunction = Restrictions.disjunction();
Criterion cirterion = Restrictions.sqlRestriction("SIMULPORTCAPACITY<SIMULPORTCAPACITYOCUPIED".toLowerCase());
disjunction.add(cirterion);
cirterion = Restrictions.sqlRestriction("ADSLPORTCAPACITY<ADSLPORTCAPACITYOCCUPIED".toLowerCase());
disjunction.add(cirterion);
cirterion = Restrictions.sqlRestriction("LANPORTCAPACITY<LANPORTCAPACITYOCCUPIED".toLowerCase());
disjunction.add(cirterion);
// ONU端口,至少要录入一种端口
Conjunction conjunction = Restrictions.conjunction();
cirterion = Restrictions.eq("lanportcapacity", 0);
conjunction.add(cirterion);
cirterion = Restrictions.eq("simulportcapacity", 0);
conjunction.add(cirterion);
cirterion = Restrictions.eq("adslportcapacity", 0);
conjunction.add(cirterion);
disjunction.add(conjunction);
queryCriteria.add(disjunction);
}
构造出的条件如下:
select *
from aaaa this_
where (simulportcapacity < simulportcapacityocupied or
adslportcapacity < adslportcapacityoccupied or
lanportcapacity < lanportcapacityoccupied or
(this_.LANPORTCAPACITY = ? and this_.SIMULPORTCAPACITY = ? and
this_.ADSLPORTCAPACITY = ?))
</class>
<sql-query name="KEY_QUERY_RECOMMENDED_USER">
(exists(select 1 from USER_RECOMMEND r where {alias}.USER_ID=r.USER_ID))
</sql-query>
<sql-query name="KEY_QUERY_NO_RECOMMENDED_USER">
(not exists(select 1 from USER_RECOMMEND r where {alias}.USER_ID=r.USER_ID))
</sql-query>
</hibernate-mapping>