Blz, galera.
O sequinte tenho essa classe mapeanda
public class FichaTecnica{
@OneToMany(cascade=CascadeType.ALL,mappedBy = "ficha")
@Cascade( { org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
@JoinColumn(name = "itens", nullable = false)
private List<ItensFicha> itens = new ArrayList<ItensFicha>();
....
....
...
}
Agora dentro dessa Classe ItensFicha tenho um campo Material que é uma classe tb
public class ItensFicha{
private Material material;
...
...
}
e agora minha classe material.
public class Material{
private String grupo;
..
..
}
Quero fazer uma query que traga os itens ordenados pelo grupo do material.
se eu colocar uma anotação @OrderBy(“material.grupo”) na classe FichaTecnica mostra esse erro
Alguem tem uma luz!!!
Não tenho certeza sobre isso, mas tenta colocar material com M maiúsculo. assim: @OrderBy(“Material.grupo”)
Ja tentei isso tb mas nao funcionou
O problema eh que isso eh uma das novidades do JPA 2.0. Entao, se esta usando JPA 1.0 (Hibernate < 3.5), voce nao conseguira fazer isso usando somente JPA. Se esta usando 3.5, isso deveria funcionar.
Mas eu vejo algumas possiveis solucoes (nao testei, mas deve funcionar), possivelmente usando anotacoes “proprietarias” do Hibernate.
Uma delas eh especificar um “@Loader”. Assim, vc especifica a clausula SQL para se “carregar” a FichaTecnica.
http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-hibspec-customsql
A segunda eh colocar o “grupo” do Material como um campo do tipo “@Formula” na classe ItensFicha. Assim, a classe FichaTecnica enxergaria o “grupo” sem precisar saber do relacionamento entre ItensFicha e Material. Nao sei se funcionaria, e deve ter implicacoes se vc usar LAZY, mas com alguns testes vc pode descobrir
Uma outra possivel saida eh vc usar uma “colecao ordenada” (“sorted collection”): ao inves de um List simples, use um SortedSet, por exemplo. Voce soh precisa criar uma classe que implemente Comparator.
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/collections.html#collections-sorted
Mas eu acho que a melhor saida eh vc ordenar direto em quem consome os dados, com HQL (melhor ainda se colocado como uma namedQuery):