Информация о Шове EntityQuery? - PullRequest
1 голос
/ 19 мая 2010

Я работаю с Seam и JPA / Hibernate уже довольно давно, но только начал изучать возможности использования классов EntityHome и EntityQuery. EntityHome кажется относительно простым с точки зрения того, что это такое и как я могу использовать его. Но EntityQuery немного менее понятен.

Я понимаю способность захватывать, например, список, содержащий все данные сущности. Однако я также видел несколько примеров использования массива RESTRICTIONS. Как именно это используется? Являются ли условия ИЛИ или условия И? Может кто-нибудь дать мне более подробную информацию о том, как EntityQuery предназначен для использования? Я проверил несколько моих книг по Seam и JPA, но ни одна из них не ссылается на классы EntityQuery. Кажется, что я очень полезный механизм, и я хотел бы извлечь из них больше пользы, если смогу. Спасибо!

1 Ответ

1 голос
/ 19 мая 2010

Прежде всего, я хотел бы сказать, что с профессиональной точки зрения вы должны держаться подальше от структуры сущности / запроса / Home Seam.

Вы можете прочитать мой комментарий о том, почему вы не должны его использовать здесь

Если вы хотите использовать его, вы должны знать, что это обмен, который вы принимаете. Это замедлит ход событий, но будет проще в использовании.

Тем не менее, позвольте мне попытаться ответить на ваши вопросы с некоторыми примерами:

However, I've also seen some examples using a RESTRICTIONS array. How exactly is this used? Are the OR conditions or AND conditions?

Начиная со шва 2.2.0 (если я не ошибаюсь), у вас есть возможность добавлять ОГРАНИЧЕНИЯ с помощью ИЛИ / И. Вы можете установить это с помощью оператора restrictionLogicOperator в вашем представлении следующим образом:

<ui:define name="label">Match</ui:define>
<h:selectOneRadio id="logic" value="#{myEnityQueryList.restrictionLogicOperator}" styleClass="radio">
  <f:selectItem itemLabel="AND" itemValue="and"/>
  <f:selectItem itemLabel="OR" itemValue="or"/>
</h:selectOneRadio>

Этот код должен быть частью формы, которая сопоставлена ​​с вашим объектом EntityQuery вместе с некоторыми ОГРАНИЧЕНИЯМИ. Ограничения используются для фильтрации запроса, чтобы вы могли получить правильный набор результатов. Например:

private static final String[] RESTRICTIONS = { "lower(person.name) like lower(concat(#{personList.person.name},'%'))"}

Так что, если у вас есть поле имени в вашей форме, вы можете набрать John, и оно добавит John% к запросу.

Can anyone give me some more detailed information as to how EntityQuery is intended to be used?

EntityQuery предназначен для использования вместе с какой-либо формой поиска. Вы связываете свою форму с полями, которые хотите найти, и затем она извлекает список на основе результатов, как я описал выше.

...