Как создать OR блоки, содержащие несколько критериев с Hibernate?

1

У меня есть несколько критериев, построенных из критериев, и я хотел бы создать дизъюнкцию между ними.

Criteria criteria1 = hibernateSession.createCriteria(MyClass);
criteria1.add(Restrictions.eq(field1, value1));
criteria1.add(Restrictions.eq(field2, value2));
criteria1.add(Restrictions.ne(field3, value3));

Что создаст что-то вроде Where field1 = value1 and field2 = value and field3 != value3.

Затем,

Criteria criteria2 = hibernateSession.createCriteria(MyClass);
criteria2.add(Restrictions.eq(field4, value4));
criteria2.add(Restrictions.eq(field5, value5));

Что создаст что-то вроде Where field4 = value4 and field5 = value5.

Моя конечная цель здесь заключается в создании дизъюнкции между criteria1 и criteria2 чтобы иметь Where (field1 = value1 and field2 = value and field3 != value3) OR (field4 = value4 and field5 = value5).

Я знаю о дизъюнкции/объединении в спящем режиме, однако они принимают только критерии (а не критерии).

Кто-нибудь из вас достиг чего-то подобного раньше?

Теги:
hibernate

1 ответ

1
Лучший ответ

Создайте два критерия И. Добавьте их в критерии как OR.

Criteria criteria = hibernateSession.createCriteria(MyClass);
Criterion rest1= Restrictions.and(Restrictions.eq(field1, value1), 
           Restrictions.eq(field2, value2),
           Restrictions.ne(field3, value3));
Criterion rest2= Restrictions.and(Restrictions.eq(field4, value4),
           Restrictions.eq(field5, value5));
criteria.add(Restrictions.or(rest1, rest2));
  • 0
    Спасибо за ответ. Это сработает для примера, который я привел. Тем не менее, я ищу что-то более общее, где я могу создать дизъюнкцию между списком критериев. Есть ли у вас мысли о том, как это сделать?
  • 0
    Извините, я не знаю способа сделать это по нескольким критериям (не уверен, что это возможно). Возможно, лучший способ сделать его общим для вас - это работать с Критериями, а затем строить критерии с дизъюнкцией против Критерия.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню