【问题标题】:Using Criterion 'OR' to narrow resultset使用标准“或”缩小结果集
【发布时间】:2023-04-09 20:04:02
【问题描述】:

我无法理解如何使用 Criterion 实现以下查询:

SELECT * FROM FooTable WHERE bar = '1' OR bar = '2;

这是我目前拥有的:

public List<FooItem> getFooItems(List<Long> bars) throws SystemException {

    DynamicQuery query = DynamicQueryFactoryUtil.forClass(FooItem.class, PortletClassLoaderUtil.getClassLoader());

    if (Validator.isNotNull(bars)) {

        List<Criterion> barCriteria = new ArrayList<Criterion>();

        for (long bar: bars) {
            query.add((RestrictionsFactoryUtil.eq("bar", bar)));
        }

        if (!barCriteria.isEmpty()) {
            for (Criterion criteria : barCriteria) {
                query.add(criteria);
            }
        }
    }

    List<FooItem> result = FooItemLocalServiceUtil.dynamicQuery(query);

    return result;
}

但是,我的查询在运行时如下所示:

SELECT * FROM FooTable WHERE bar = '1' AND bar  = '2';

我怎样才能把这些AND's 变成OR's 声明?

注意:bar 不是表的主键。

【问题讨论】:

    标签: java sql hibernate liferay criteria


    【解决方案1】:

    你应该使用Restrictions.disjuntion(),试试这样的

    if (!barCriteria.isEmpty()) {
        Disjunction or = Restrictions.disjunction();
        for (Criterion criteria : barCriteria) {
            or.add(criteria);
        }
        query.add(or);
    }
    

    【讨论】:

      猜你喜欢
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多