具有 AND/OR 组合的 Hibernate 标准
Hibernate criteria with a combination of AND/OR
我必须在代码中建立一个条件,如下所示。添加的条件数量为 AND/OR 的混合可能会因相同的参数而异。
WHERE ( (name=? AND number=?) ) OR ( (name=? AND number=?) ) OR (...) OR (...)
我在循环中尝试了以下代码 -- 没有按预期工作:
someList.forEach(item -> {
SimpleExpression nameExp = Restrictions.eq("name", item.getName());
SimpleExpression numberExp = Restrictions.eq("number", item.getNumber());
Criterion criterion = Restrictions.and(nameExp, numberExp);
criteria.add(Restrictions.or(criterion));
}
使用上面的代码,我在第一个条件和第二个条件之间使用 AND 获得输出。我想要条件 1 和条件 2 之间的或。
WHERE ( (name=? AND number=?) ) AND ( (name=? AND number=?) )
如何使用条件构建顶部提到的条件?
您将标准收集到列表中,最后调用 criteria.add(Restrictions.or(list))
。
这是面向一般观众的示例代码,基于 Christian Beikov 的。
我已经在我的标准中添加了额外的条件来完善解决方案。
criteria.add(
Restrictions.or(
Restrictions.and(criterionListB.toArray(new Criterion[0])),
Restrictions.or(criterionListA.toArray(new Criterion[0]))
));
此代码的计算结果为 AND/OR 操作的混合,如下所示:
(
(
(name = ? AND number = ?) OR (name = ? AND number = ?)
)
OR
(
(id = ? AND email = ?)
)
)
我必须在代码中建立一个条件,如下所示。添加的条件数量为 AND/OR 的混合可能会因相同的参数而异。
WHERE ( (name=? AND number=?) ) OR ( (name=? AND number=?) ) OR (...) OR (...)
我在循环中尝试了以下代码 -- 没有按预期工作:
someList.forEach(item -> {
SimpleExpression nameExp = Restrictions.eq("name", item.getName());
SimpleExpression numberExp = Restrictions.eq("number", item.getNumber());
Criterion criterion = Restrictions.and(nameExp, numberExp);
criteria.add(Restrictions.or(criterion));
}
使用上面的代码,我在第一个条件和第二个条件之间使用 AND 获得输出。我想要条件 1 和条件 2 之间的或。
WHERE ( (name=? AND number=?) ) AND ( (name=? AND number=?) )
如何使用条件构建顶部提到的条件?
您将标准收集到列表中,最后调用 criteria.add(Restrictions.or(list))
。
这是面向一般观众的示例代码,基于 Christian Beikov 的
我已经在我的标准中添加了额外的条件来完善解决方案。
criteria.add(
Restrictions.or(
Restrictions.and(criterionListB.toArray(new Criterion[0])),
Restrictions.or(criterionListA.toArray(new Criterion[0]))
));
此代码的计算结果为 AND/OR 操作的混合,如下所示:
(
(
(name = ? AND number = ?) OR (name = ? AND number = ?)
)
OR
(
(id = ? AND email = ?)
)
)