ordine hibernate per associazione
-
22-08-2019 - |
Domanda
Sto usando Hibernate 3.2, e secondo criteri di costruire una query. Mi piacerebbe aggiungere e "ORDER BY" per un'associazione molti-a-uno, ma non vedo come ciò possa essere fatto. La query Hibernate finirebbe simile a questo, credo:
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
Ho provato criteria.addOrder ( "assnName.propertyName"), ma non funziona. So che può essere fatto per le proprietà normali. Mi sto perdendo qualcosa?
Soluzione
Ok, trovato la risposta. Ho provato qualcosa che non pensavo avrebbe funzionato, ma con mia sorpresa fatto. Stavo cercando questo:
Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class);
criteria.addOrder(Order.asc("assnName.propertyName"))
ma quello che effettivamente lavorate era:
Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class);
Criteria assnCrit = criteria.createCriteria("assnName");
assnCrit.addOrder(Order.asc("propertyName"));
avevo fatto l'ipotesi che il metodo AddOrder () era utilizzabile solo sui criteri principali e non su alcun criterio di associazione.
Altri suggerimenti
ho avuto lo stesso problema e può anche essere risolto in questo modo:
Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class)
.createAlias("assnName","a")
.addOrder(Order.asc("a.propertyName"));
CREATEALIAS consente di mantenere i criteri radicato sul soggetto originale (WipDiscreteJob.class in questo caso) in modo da poter continuare a costruire i tuoi criteri in caso di necessità (ad esempio, se avete bisogno di un secondo ordine dalla proprietà da voi soggetto originale).