如何在seam应用程序中订购EntityQuery查询?

时间:2009-06-10 18:30:12

标签: seam entity

我的项目最初是由seam-gen和动作“List”bean生成的,OfficeViewList看起来非常像第一次生成时那样。

bean扩展了EntityQuery。

现在我想订购结果。这样做的最佳方式是什么?

我是否想在EJBQL中添加某种“order by”类?或者我想通过

设置选择顺序

以下是seam-gen生成的代码(我已更改了RESTRICTIONS,但其他情况则相同):

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);
}

但我无法弄清楚如何做到这些是否合适。我找不到任何真正解释如何使用这些文档的文档。

或者我是否通过EJBQL语句添加某种“order by”子句?

或者是否有要添加到我的实体bean的注释?还是构造函数?

选择太多,知识不够。

提前谢谢。

TDR

2 个答案:

答案 0 :(得分:3)

我最后添加了

setOrderColumn("officeView.officeId");

到构造函数,这完全符合我的要求。

答案 1 :(得分:0)

EntityQuery只在第一次加载限制数组,然后他不再调用限制。 因此,如果您想使用相同的EntityQuery对象并使用第二个解决方案更改限制,我也会使用它。或者初始化另一个EntityQuery对象并设置不同的限制。