Estou querendo ordenar uma consulta através de um dos objetos da consulta, porem o CRITERIA do hibernate aparentemente não é capz de fazer isso
eu tenho 1 entidade Cidade, que contem id,nome,estado e estado é uma FK um ID para outra entidade chamada Estado...
A minha Criteria esta assim...
//Em resumo a query quer dizer:
//todos de Cidade onde (nome contém 'João' E estado != paraiba)
//Ordene por estado
List<Cidade> cidades2 = SESSION
.createCriteria(Cidade.class)
.add(
Expression.and(
Expression.like("nome", "%João%"),
Expression.not(Expression.eq("estado", paraiba))
)
)
.addOrder(Order.asc("estado"))
.list();
//apenas para constar... paraíba é um Objeto do tipo estado resgatado assim
Estado paraiba = (Estado)SESSION
.createCriteria(Estado.class)
.add(Expression.eq("nome", "Paraíba"))
.uniqueResult();
o fato é que a Indexação de estado não é por ordem alfabética e por exemplo meu código de bahia e são paulo é fora de ordem.... e o order do criteria ordena pela ordem do index... mesmo estando minha classe Estado implementado comparable corretamente...
public class Estado implements Serializable, Comparable<Estado>{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@Column(name = "nome")
private String nome;
//...
public int compareTo(Estado o) {
return nome.compareTo(o.nome);
}
}
existe alguma forma do criteria do Hibernate ordenar pela ordem do Objeto ?? e não pela do Index ?? usando o Comparable ??
a ordem da consulta sai conforme abaixo... mostrando são paula como o 1° resultado e bahia no ultimo, o que pela ordem do index esta correto, porem pela ordem natural da classe Estado não esta =/
se alguem puder ajudar agradeço
João Ramalho/São Paulo
São João da Boa Vista/São Paulo
São João das Duas Pontes/São Paulo
São João de Iracema/São Paulo
São João do Pau d`Alho/São Paulo
São João do Jaguaribe/Ceará
João Neiva/Espírito Santo
São João da Paraúna/Goiás
São João d`Aliança/Goiás
João Lisboa/Maranhão
São João Batista/Maranhão
São João do Carú/Maranhão
São João do Paraíso/Maranhão
São João do Soter/Maranhão
São João dos Patos/Maranhão
João Monlevade/Minas Gerais
João Pinheiro/Minas Gerais
São João Batista do Glória/Minas Gerais
São João da Lagoa/Minas Gerais
São João da Mata/Minas Gerais
São João da Ponte/Minas Gerais
São João das Missões/Minas Gerais
São João del Rei/Minas Gerais
São João do Manhuaçu/Minas Gerais
São João do Manteninha/Minas Gerais
São João do Oriente/Minas Gerais
São João do Pacuí/Minas Gerais
São João do Paraíso/Minas Gerais
São João Evangelista/Minas Gerais
São João Nepomuceno/Minas Gerais
Antônio João/Mato Grosso do Sul
São João da Ponta/Pará
São João de Pirabas/Pará
São João do Araguaia/Pará
João Alfredo/Pernambuco
São João/Pernambuco
João Costa/Piauí
São João da Canabrava/Piauí
São João da Fronteira/Piauí
São João da Serra/Piauí
São João da Varjota/Piauí
São João do Arraial/Piauí
São João do Piauí/Piauí
São João/Paraná
São João do Caiuá/Paraná
São João do Ivaí/Paraná
São João do Triunfo/Paraná
São João da Barra/Rio de Janeiro
São João de Meriti/Rio de Janeiro
Coronel João Pessoa/Rio Grande do Norte
João Câmara/Rio Grande do Norte
João Dias/Rio Grande do Norte
São João do Sabugi/Rio Grande do Norte
São João da Baliza/Roraima
São João da Urtiga/Rio Grande do Sul
São João do Polêsine/Rio Grande do Sul
São João Batista/Santa Catarina
São João do Itaperiú/Santa Catarina
São João do Oeste/Santa Catarina
São João do Sul/Santa Catarina
Cedro de São João/Sergipe
Coronel João Sá/Bahia
João Dourado/Bahia
Mata de São João/Bahia