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}), '%'))"};

Надеюсь, это даст вам некоторые идеи.

Другие вопросы по тегам