使用Criterion'或'来缩小结果集

时间:2014-12-30 13:33:16

标签: java sql hibernate liferay criteria

我无法理解如何使用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转换为OR的陈述?

注意: bar不是桌面上的主键。

1 个答案:

答案 0 :(得分:3)

您应该使用Restrictions.disjuntion(),尝试类似这样的内容

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