2014-02-06 2 views
1

Я пытаюсь найти критерий, который бы проверял, является ли определенная строка одним из нескольких возможных шаблонов.Несколько OR в ограничениях спящего режима с использованием дизъюнкции или в одном поле

например. myField не должны соответствовать одной из следующих моделей: pattern1%, pattern2%, pattern3%

Если бы я это сделать по одному за раз, ограничение будет выглядеть как

criteria.add(Restrictions.not(Restrictions.in("myField", "pattern1%"))) 

для каждой из моделей. Поскольку есть несколько, я думал о том, чтобы опробовать ограничение disjunction из спящего режима, как ответ найден here. Например, давайте просто скажем, что я не использую шаблоны и приравниваю к серии фиксированных строк. Поэтому я надеялся на что-то вроде:

criteria.add(
    Restrictions.disjunction() 
     .add(Restrictions.like("myField", "str1")) 
     .add(Restrictions.like("myField", "str2")) 
) 

Но по какой-то причине это не работает. Когда я изменил его:

criteria.add( 
    Restrictions.disjunction() 
     .add(Restrictions.like("myField", "str1")) 
     .add(Restrictions.like("anotherField", "str2")) 
) 

это делает, так что я не был уверен, что это потому, что разъединение не допустит несколько условий в той же области. Однако образцы here в разделе 15.2 показывают другое поле «возраст».

Таким образом, на данный момент, я вынужден использовать

criteria.add(
    Restrictions.in("myField", new String[] {"str1", "str2"}) 
) 

который решает только половину моей проблемы, так как мне нужно картины быть где-то там.

Итак, мой вопрос в том, можно ли использовать дизъюнкцию или внутри, чтобы проверить, соответствует ли строка любому из шаблонов, которые могут быть определены? Если да, то как? Или есть лучший способ?

Спасибо!

ответ

4

Вы можете попробовать что-то вроде этого:

criteria.add(Restrictions.disjunction().add(
       Restrictions.or(Restrictions.like("myField", "str1"), 
         Restrictions.like("myField", "str1")))); 

Или, если есть какой-то шаблон, который вы ищете, то это должно работать:

criteria.add(Restrictions.disjunction().add(
        Restrictions.or(Restrictions.like("myField", "%"+"str1"), 
          Restrictions.like("myField", "str1"+"%")))); 

Надеется, что это помогает .. !!!

Смежные вопросы