首先,这是关于ORing两个标准,而不是两个标准。
作为查询的一部分,我正在尝试这样做:
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(...),但我不确定如何。我会在哪个标准中添加最后一个标准?第一个?
答案 0 :(得分:2)
使用Disjunction
:
Disjunction dis = Restrictions.disjunction();
dis.add(Restrictions.eq("precinct.id", areaId));
dis.add(Restrictions.eq("overlaps.id", areaId));
criteria.add(dis);
请注意,您可能需要使用别名precinct
和overlaps
。