У меня есть список, который кормить программно в соответствии с некоторыми условиями, код выглядит следующим образом:Hibernate построить запрос из списка <Criterion> с или операторами и динамическими ограничениями
List<Criterion> restrictionList = new ArrayList<Criterion>();
for(int i = 1; i<someconditions.length);i++){
if(condition1){
restrictionList.add(...);
} else if(condition2){
restrictionList.add(...)
} else if(condition3){
restrictionList.add(...)
}
}
И при построении критериев, я сделал это :
for (int c = 0; c < restrictionList.size()-1;c++){
crit.add(Restrictions.or(restrictionList.get(c),restrictionList.get(c+1)));
}
где положение в строке запроса выглядит:
((А или в) и (в или с))
, поскольку существует и в построенном предложении, некоторые результаты не показывают
Скажем, у меня есть записи R1, R2 и R3
R1 удовлетворяет условиям А и С R2 удовлетворяет условию А R3 удовлетворяет условие в и с
So (а или в) имеют R1, R2 и R3, (в или с) имеют R1 и R3
Поскольку оба условия связаны с AND, R-не остались от итогового результата
Как я могу сделать сделать, где положение выглядеть следующим образом:
(А или В или С)
Таким образом, записи могут быть отображены, когда они встречаются, по крайней мере одно условие
Спасибо.
Извините, но какие у вас вопросы? О «некоторых результатах не показывают» - не можете ли вы привести пример, что показывают, а что нет? –
@ViacheslavVedenin Извините, я не был достаточно ясен. Я отредактировал вопрос с более подробной информацией, дайте мне знать, если вам нужно другое разъяснение. – rhernandez