簡體   English   中英

具有 AND/OR 組合的休眠條件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM