2009-06-10 10 views
0

Mon projet a été généré à l'origine par seam-gen et l'action "List" bean, OfficeViewList ressemble beaucoup à ce qu'il a fait lors de la première génération.Comment puis-je commander une requête EntityQuery dans une application seam?

Le bean étend EntityQuery.

Maintenant, je veux commander les résultats. Quelle est la meilleure façon de procéder? Est-ce que je veux ajouter une sorte de classe "order by" à mon EJBQL? Ou est-ce que je veux définir l'ordre de sélection via

Voici le code qui seam-gen généré (j'ai changé les restrictions, mais sinon il est le même):

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

La traduction SQL est à peu près

select * from office_view où l'ordre par office_id

Je pensais utiliser setOrder ou setOrderColumn, comme celui-ci

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

mais je ne peux pas vraiment comprendre comment le faire ou si l'un ou l'autre est approprié. Je ne trouve aucune documentation qui explique vraiment comment les utiliser.

Ou est-ce que j'ajoute une sorte de clause "order by" à une instruction EJBQL?

Ou y a-t-il une annotation à ajouter à mon entité bean? ou au constructeur?

Trop de choix, pas assez de connaissances.

Merci d'avance.

TDR

+0

typo dans la première ligne. il n'a pas été généré par l'action "List" bean, mais ce bean a été généré par seam-gen avec tout le reste. TDR –

Répondre

3

Je fini par ajouter

setOrderColumn("officeView.officeId"); 

au constructeur et qui fait exactement ce que je voulais.

0

EntityQuery charger le tableau des restrictions que la première fois, alors il ne remet pas de restrictions plus. Donc si vous voulez utiliser le même objet EntityQuery et modifier les restrictions utilisez votre deuxième solution, je l'utilise aussi. Ou initialisez un autre objet EntityQuery et définissez différentes restrictions.

Questions connexes