2009-05-15 8 views
13

J'utilise Hibernate 3.2, et j'utilise des critères pour construire une requête. Je voudrais ajouter et «commander par» pour une association plusieurs-à-un, mais je ne vois pas comment cela peut être fait. La requête Hibernate finirait par ressembler à cela, je suppose:hibernate order by association

select t1.a, t1.b, t1.c, t2.dd, t2.ee 
from t1 
inner join t2 on t1.a = t2.aa 
order by t2.dd <-- need to add this 

J'ai essayé criteria.addOrder (« assnName.propertyName »), mais il ne fonctionne pas. Je sais que cela peut être fait pour des propriétés normales. Est-ce que je manque quelque chose?

Répondre

23

Ok, trouvé la réponse. J'ai essayé quelque chose que je ne pensais pas fonctionner, mais à ma grande surprise. Je tentais ceci:

Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class); 

criteria.addOrder(Order.asc("assnName.propertyName")) 

mais ce qui en fait travaillé était:

Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class); 
Criteria assnCrit = criteria.createCriteria("assnName"); 

assnCrit.addOrder(Order.asc("propertyName")); 

je l'avais fait l'hypothèse que la méthode AddOrder() est utilisable uniquement sur les principaux critères et non sur des critères d'association.

14

Je faisais la même question et il peut aussi être résolu comme ceci:

Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class) 
    .createAlias("assnName","a") 
    .addOrder(Order.asc("a.propertyName")); 

createAlias ​​vous permet de garder vos critères ancrés sur votre entité d'origine (WipDiscreteJob.class dans ce cas) afin que vous puissiez garder construire vos critères au cas où vous en auriez besoin (par exemple, si vous avez besoin d'une seconde commande par propriété de votre entité d'origine).

+1

Cherchait partout pour cela, merci! Vous pouvez même faire '.createAlias ​​(" assnName "," assnName ")' qui vous permet de garder la même syntaxe que HQL. –

+0

@Abdullah Heureux de pouvoir vous aider. – Marcelo

+1

C'était très utile. Il a fallu un certain temps pour le trouver. – smp7d

Questions connexes