我有一个名为andOrButtonFilter
的字符串数组,用于存储用户选择的and
or
个过滤器。
另外两个ArrayList
名为column
和value
分别存储列名及其值。
我希望当前查询附加到上一个查询并显示结果 但我的查询没有附加到上一个查询,它显示单个结果。
例如:
如果name=xyz
是第一次查询而且
age=26
是第二个查询
它不会导致name=xyz
和age=26
。它仅在第二次执行时显示age=26
的结果。
我哪里错了?
这是我目前正在使用的代码:
for (int i=0; i<andOrButtonFilter.length; i++)
{
if(andOrButtonFilter[i]=="and")
{
Conjunction conjunction =Restrictions.conjunction();
if ((column.get(i) != null) && (value.get(i)!=null))
{
conjunction.add(Restrictions.or(Restrictions.eq(column.get(i), value.get(i))));
criteriaQuery.add(conjunction);
}
}
else if(andOrButtonFilter[i]=="or")
{
Disjunction disjunction =Restrictions.disjunction();
if ((column.get(i) != null) && (value.get(i)!=null))
{
disjunction.add(Restrictions.or(Restrictions.eq(column.get(i), value.get(i))));
criteriaQuery.add(disjunction);
}
}
else
{
criteriaQuery.add(Restrictions.eq(column.get(i), value.get(i)));
}
}
答案 0 :(得分:0)
我可以找到一些代码问题。
1)您将字符串与==而不是等于进行比较。因此,您的代码始终会进入最后一部分criteriaQuery.add(Restrictions.eq(column.get(i), value.get(i)));
2)在你的连接/分离代码中,你仍然使用Restrictions.or,这有点不对。你甚至不需要Restrictions.or或Restrictions.and因为Conjunction正在用AND添加限制而且Disjunction正在添加OR无论如何。
3)在每次迭代中,你都会添加单独的析取,这基本上是一个单一的标准,并且不会像你期望的那样工作。
我会尝试使用类似的东西:
Disjunction disjunction =Restrictions.disjunction();
Conjunction conjunction =Restrictions.conjunction();
for (int i=0; i<andOrButtonFilter.length; i++)
{
if("and".equals(andOrButtonFilter[i]))
{
if ((column.get(i) != null) && (value.get(i)!=null))
{
conjunction.add(Restrictions.eq(column.get(i), value.get(i)));
}
}
else if("or".equals(andOrButtonFilter[i]))
{
if ((column.get(i) != null) && (value.get(i)!=null))
{
disjunction.add(Restrictions.eq(column.get(i), value.get(i)));
}
}
else
{
criteriaQuery.add(Restrictions.eq(column.get(i), value.get(i)));
}
}
criteriaQuery.add(conjunction);
criteriaQuery.add(disjunction);
我并不是说确切的代码会起作用,因为我没有测试过;)但是你明白了,你可以从那里进行调试。