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?

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top