我无法理解如何使用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
不是桌面上的主键。
答案 0 :(得分:3)
您应该使用Restrictions.disjuntion()
,尝试类似这样的内容
if (!barCriteria.isEmpty()) {
Disjunction or = Restrictions.disjunction();
for (Criterion criteria : barCriteria) {
or.add(criteria);
}
query.add(or);
}