Ich werde drei Listen und 2 Betreiber op1 bekommen, op2, die sein kann „ODER“, „UND“, „AND NOT“ .. ich brauche wie dieseAusgabe mit Disjunktion in DetachedCriteria
eine Abfrage zu bilden zum Beispiel eine Tabelle Mitarbeiter berücksichtigen, werde ich drei Listen Liste1, Liste2, list3 von emp_id des
select emp_num , emp_dpt , emp_name
from employee
where
emp_id in (list1)
op1
emp_id in (list2)
op2
emp_id in (list3)
ich geschrieben zwei Methoden haben
public List<Employee> getRequestedEmployee(List<Long> list1 , List<Long> list2, List<Long> list3 , String op1 , String op2) {
DetachedCriteria dc = DetachedCriteria.forClass(Employee)
if (!CollectionUtils.isEmpty(list1))
{
dc.add(Restrictions.in(list1,emp_id));
}
if(!CollectionUtils.isEmpty(list3)
{
dc = getCriteria(dc , list2 , op1);
}
if(!CollectionUtils.isEmpty(list3)
{
dc = getCriteria(dc , list3 , op2);
}
}
private DetachedCriteria getCriteria(DetachedCriteria dc , List<long> empIdList, String operator)
{
if(!CollectionUtils.IsEmpty(empIdList))
{
if("and".equals(operator))
{
Conjunction andOp = Restrictions.Conjunction();
andOp.add(Restrictions.in(empIdList));
dc.add(andOp);
}
else if("or".equals(operator))
{
Disjunction orOp = restrictions.disjunction();
orOp.add(Restrictions.in(empIdList))
dc.add(andOp);
}
else
{
dc.add(Restrictions.not(empIdList));
}
return dc;
}
}
ich bin vor Problem mit Disjunction bekommen .. Wann immer bin vorbei Oder es ist die Interpretation als UND ..
zum Beispiel, wenn op1 = and
ist vorbei, op2 = or
es bildet wie diese
select emp_num , emp_dpt , emp_name
from employee
where
emp_id in (list1)
and
emp_id in (list2)
and
emp_id in (list3)
aber was ich will, ist
select emp_num , emp_dpt , emp_name
from employee
where
emp_id in (list1)
and
emp_id in (list2)
or
emp_id in (list3)
wo immer erwarten oder ist Putting und egal op1 oder op2
Benötigen Sie Hilfe ...