首先,这是关于对两个条件(而不是两个条件)进行“或”运算。
作为查询的一部分,我正在尝试执行以下操作:
from voters v
left join addresses a on v.addressId = a.addressId
left join precincts p on a.areaId = a.precinctId
left join overlaps o on o.areaId1 = p.areaId
where p.areaId = ? or o.areaId2 = ?
和两个?是相同的值。我得到了一点,但现在被卡住了。这就是我所拥有的
criteria = session.createCriteria(Voter.class);
addressCriteria = criteria.createCriteria("address");
precinctCriteria = addressCriteria.createCriteria("precinct");
overlapsCriteria = precinctCriteria.createCriteria("overlaps");
我想执行以下操作,但是不起作用。
SimpleExpression lhs = Restrictions.eq("precinct.id", areaId);
SimpleExpression rhs = Restrictions.eq("overlaps.id", areaId);
LogicalExpression criterion = Restrictions.or(lhs, rhs);
那么,我真正应该做什么?我以为它涉及createAlias(...),但不确定如何。我将最后一个标准添加到哪个标准中?第一个?
最佳答案
使用Disjunction
:
Disjunction dis = Restrictions.disjunction();
dis.add(Restrictions.eq("precinct.id", areaId));
dis.add(Restrictions.eq("overlaps.id", areaId));
criteria.add(dis);
请注意,您可能需要为
precinct
和overlaps
加上别名。