首先,这是关于对两个条件(而不是两个条件)进行“或”运算。

作为查询的一部分,我正在尝试执行以下操作:

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);


请注意,您可能需要为precinctoverlaps加上别名。

09-30 23:35