hibernação ordem pela associação
-
22-08-2019 - |
Pergunta
Estou usando o Hibernate 3.2, e usando critérios para construir uma consulta. Eu gostaria de adicionar e "order by" para uma associação muitos-para-um, mas eu não vejo como isso pode ser feito. A consulta Hibernate iria acabar com essa aparência, eu acho:
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
Eu tentei criteria.addOrder ( "assnName.propertyName"), mas ele não funciona. Eu sei que pode ser feito para as propriedades normais. Estou faltando alguma coisa?
Solução
Ok, encontrei a resposta. Eu tentei algo que eu não acho que iria funcionar, mas para minha surpresa o fez. Eu estava tentando o seguinte:
Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class);
criteria.addOrder(Order.asc("assnName.propertyName"))
mas o que realmente funcionou foi:
Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class);
Criteria assnCrit = criteria.createCriteria("assnName");
assnCrit.addOrder(Order.asc("propertyName"));
Eu tinha feito a suposição de que o método addOrder () foi apenas utilizável nos critérios principais e não em qualquer critério de associação.
Outras dicas
Eu estava tendo o mesmo problema e também pode ser resolvido assim:
Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class)
.createAlias("assnName","a")
.addOrder(Order.asc("a.propertyName"));
createAlias ??permite que você mantenha seus critérios enraizada na sua entidade de origem (WipDiscreteJob.class neste caso) para que você possa continuar a construir os seus critérios em caso de você precisar dele (por exemplo, se você precisar de uma segunda ordem de propriedade de você entidade original).