Как я могу заказать запрос EntityQuery в приложении шва? - PullRequest
0 голосов
/ 10 июня 2009

Мой проект изначально был сгенерирован с помощью seam-gen и компонента "Список", OfficeViewList выглядит так же, как и при первом создании.

Бин расширяет EntityQuery.

Теперь я хочу заказать результаты. Каков наилучший способ сделать это?

Хочу ли я добавить какой-нибудь класс "order by" в мой EJBQL? Или я хочу установить порядок выбора с помощью

Вот код, сгенерированный seam-gen (я изменил ОГРАНИЧЕНИЯ, но в остальном он тот же):

private static final String EJBQL = 
        "select officeView from OfficeView officeView";

private static final String[] RESTRICTIONS = {
  "lower(officeView.addr1) like concat(lower(#{officeViewList.officeView.addr1}),'%')",
  "lower(officeView.buildingId) like  
     concat(lower({officeViewList.officeView.buildingId}),'%')",
  "lower(officeView.circuitId) like 
     concat('%',lower({officeViewList.officeView.circuitId}),'%')",};


public OfficeViewList() {
  setEjbql(EJBQL);
  setRestrictionExpressionStrings(Arrays.asList(RESTRICTIONS));
  setMaxResults(25);
}

Перевод SQL примерно

выберите * из office_view, где заказ по office_id

Я думал использовать setOrder или setOrderColumn, как это

public OfficeViewList() {
  setEjbql(EJBQL);
  setRestrictionExpressionStrings(Arrays.asList(RESTRICTIONS));
  setOrderColumn("office_id"); 
  setMaxResults(25);
}

но я не могу понять, как это сделать, или подходит ли что-то из этого. Я не могу найти документацию, которая действительно объясняет, как их использовать.

Или я могу добавить какое-то предложение "order by" к выражению EJBQL?

Или есть аннотация для добавления к моему бину сущности? или конструктору?

Слишком много вариантов, недостаточно знаний.

Заранее спасибо.

TDR

Ответы [ 2 ]

3 голосов
/ 17 июня 2009

Я закончил тем, что добавил

setOrderColumn("officeView.officeId");

конструктору, и он сделал именно то, что я хотел.

0 голосов
/ 15 июня 2009

EntityQuery загружает массив ограничений только в первый раз, затем он больше не вызывает ограничения. Поэтому, если вы хотите использовать один и тот же объект EntityQuery и изменить ограничения, используйте ваше второе решение, я тоже его использую. Или инициализируйте другой объект EntityQuery и установите различные ограничения.

...