0

私のプロジェクトは元々seam-genによって生成され、アクション「List」BeanであるOfficeViewListは、最初に生成されたときとほとんど同じように見えます。

BeanはEntityQueryを拡張します。

結果を注文したいと思います。これを行うための最良の方法は何ですか?

ある種の「orderby」クラスを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の翻訳は大まかに

select * from office_view where order by office_id

私はこのようにsetOrderまたはsetOrderColumnを使用することを考えていました

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

しかし、私はそれを行う方法や、これらのいずれかが適切であるかどうかを完全に理解することはできません。これらの使用方法を実際に説明しているドキュメントが見つかりません。

または、EJBQLステートメントによって何らかの「orderby」句を追加しますか?

または、エンティティBeanに追加するアノテーションはありますか?またはコンストラクターに?

選択肢が多すぎて、知識が足りません。

前もって感謝します。

TDR

4

2 に答える 2

3

私は追加することになった

setOrderColumn("officeView.officeId");

コンストラクターに、そしてそれはまさに私が望んでいたことをしました。

于 2009-06-17T13:06:38.287 に答える
0

EntityQueryは、最初に制限配列をロードするだけで、それ以降は制限を呼び出しません。したがって、同じEntityQueryオブジェクトを使用し、制限を変更する場合は、2番目のソリューションを使用しますが、私もそれを使用します。または、別のEntityQueryオブジェクトを初期化し、異なる制限を設定します。

于 2009-06-15T13:49:07.153 に答える