【问题标题】:How to create OR blocks containing multiple criterias with Hibernate?如何使用 Hibernate 创建包含多个条件的 OR 块?
【发布时间】:2015-04-11 16:07:37
【问题描述】:

我有多个由标准构成的标准,我想在它们之间创建一个分离。

Criteria criteria1 = hibernateSession.createCriteria(MyClass);
criteria1.add(Restrictions.eq(field1, value1));
criteria1.add(Restrictions.eq(field2, value2));
criteria1.add(Restrictions.ne(field3, value3));

这将创建类似Where field1 = value1 and field2 = value and field3 != value3

那么,

Criteria criteria2 = hibernateSession.createCriteria(MyClass);
criteria2.add(Restrictions.eq(field4, value4));
criteria2.add(Restrictions.eq(field5, value5));

这将创建类似Where field4 = value4 and field5 = value5

我在这里的最终目标是在criteria1criteria2 之间创建一个分离,以得到Where (field1 = value1 and field2 = value and field3 != value3) OR (field4 = value4 and field5 = value5)

我知道hibernate中的析取/结合,但是,它们只接受标准(而不是标准)。

你们中的任何人以前有过类似的成就吗?

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    创建两个 AND 条件。 将它们作为 OR 添加到条件中。

    Criteria criteria = hibernateSession.createCriteria(MyClass);
    Criterion rest1= Restrictions.and(Restrictions.eq(field1, value1), 
               Restrictions.eq(field2, value2),
               Restrictions.ne(field3, value3));
    Criterion rest2= Restrictions.and(Restrictions.eq(field4, value4),
               Restrictions.eq(field5, value5));
    criteria.add(Restrictions.or(rest1, rest2));
    

    【讨论】:

    • 感谢您的回答。它适用于我给出的示例。但是,我正在寻找更通用的东西,我可以在其中创建标准列表之间的析取。你有什么想法吗?
    • 对不起,我知道无法通过多个标准来做到这一点(不确定是否可行)。也许让它对你来说通用的最好方法是使用 Criterions,然后用与 Criterion 的析取来构建标准
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    相关资源
    最近更新 更多