[英]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 之間的 OR。
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 = ?)
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.