Hibernate ORing两个标准

时间:2011-08-25 14:47:12

标签: java hibernate

首先,这是关于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(...),但我不确定如何。我会在哪个标准中添加最后一个标准?第一个?

1 个答案:

答案 0 :(得分:2)

使用Disjunction

Disjunction dis = Restrictions.disjunction();
dis.add(Restrictions.eq("precinct.id", areaId));
dis.add(Restrictions.eq("overlaps.id", areaId));
criteria.add(dis);

请注意,您可能需要使用别名precinctoverlaps