Java 使用标准';或';缩小结果集

Java 使用标准';或';缩小结果集,java,sql,hibernate,liferay,criteria,Java,Sql,Hibernate,Liferay,Criteria,我无法理解如何使用Criteria实现以下查询: SELECT * FROM FooTable WHERE bar = '1' OR bar = '2; 这就是我目前拥有的: public List<FooItem> getFooItems(List<Long> bars) throws SystemException { DynamicQuery query = DynamicQueryFactoryUtil.forClass(FooItem.class,

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

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;
}
如何将这些
转换为
的语句


注意:
bar
不是表上的主键。

您应该使用
限制。disjunition()
,请尝试以下操作

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