Seam - Entity Query - динамические ограничения
У меня есть EntityQuery - addressList
сгенерированный Seam-gen для Entity Address
,
Допустим, адрес имеет следующие поля: streetName
а также city
Так что Seam-gen генерирует для них ограничения.
Я хотел бы расширить мой EntityQuery со следующими ограничениями: у меня есть поле 'keyVal', которое может быть установлено в контексте лица с помощью #{addressList.keyVal}
, Давайте предположим, что keyVal
является aaa bbb ccc
, Теперь запрос должен добавить ограничения, которые будут использоваться для поиска всех объектов с:
streetName like '%aaa%' or streetName like '%bbb%' or streetName like '%ccc%'
or city like '%aaa%' or city like '%bbb%' or city like '%ccc%'
Есть ли у вас какие-либо предложения, как этого добиться? Я действительно застрял.
1 ответ
Проблема заключается в том, что EntityQuery не поддерживает привязки нескольких значений к ограничениям. См. https://issues.jboss.org/browse/JBSEAM-1065
Вы можете обойти это иногда, творчески используя свой класс критериев.
Иногда вы можете посмотреть на изменение запроса. Например, если у меня есть один вход staffName и мне нужно запросить, где имя персонала, например, имя ввода, ИЛИ фамилия персонала, например, input, я могу написать свой запрос следующим образом:
private static final String[] RESTRICTIONS = {
"lower(concat(s.firstName, concat(' ', s.lastName))) like concat('%',
concat(lower(#{criteria.staffName}), '%'))"};
Надеюсь, это даст вам некоторые идеи.