Я пытаюсь найти критерий, который бы проверял, является ли определенная строка одним из нескольких возможных шаблонов.Несколько 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"})
)
который решает только половину моей проблемы, так как мне нужно картины быть где-то там.
Итак, мой вопрос в том, можно ли использовать дизъюнкцию или внутри, чтобы проверить, соответствует ли строка любому из шаблонов, которые могут быть определены? Если да, то как? Или есть лучший способ?
Спасибо!