Ordenação de ENUM no JPA

4 respostas
shadowzaum

Boa tarde galera,

É o seguinte, tenho o seguinte enum.

public enum StatusType implements Serializable {

	ABERTO("ABERTO"),
	EM_ANDAMENTO("EM_ANDAMENTO"),
	CONCLUIDO("CONCLUIDO"),
	CANCELADO("CANCELADO");
	
	private String userType;
	
	private StatusType(String userType) {
		this.userType = userType;
	}

	@Override
	public String toString() {
		return this.userType;
	}

}

E adiciono no banco de dados com @Enumerated(EnumType.STRING).

Problema é que quando eu retorno uma lista e boto na Query um “order by” o enum, ele ordena como se fosse String (ABERTO, CANCELADO, CONCLUIDO E EM ANDAMENTO).

O que gostaria de saber é se tem como ele ordenar pela ordem da enum?

Agradeço desde já.

4 Respostas

Hebert_Coelho

Acho que tem jeito ñ.

Ou você salva como número no db, ou então você salva em um outro campo o valor numero e manda orderby nele.

Um outro modo mais gambiarra que eu imagino seria fazer um case sobre esse campo e mandar um order by nele.

shadowzaum

É, o metodo vai ser salvar com Enumerated ORDINAL mesmo, criar outra coluna pra isso vai ser meio gambita mesmo, pelo menos na minha aplicação.

O “problema” vai ser mudar isso em produção, o que não é um problema real, só vai dar mais trabalho na hora de atualizar o sistema.

Valeu ai pela ajuda.

Hebert_Coelho

shadowzaum:
É, o metodo vai ser salvar com Enumerated ORDINAL mesmo, criar outra coluna pra isso vai ser meio gambita mesmo, pelo menos na minha aplicação.

O “problema” vai ser mudar isso em produção, o que não é um problema real, só vai dar mais trabalho na hora de atualizar o sistema.

Valeu ai pela ajuda.

Uma coisa que você pode fazer e não influenciar no banco de dados é criar um comparator e depois de buscar os dados no DB ordenar a lista de acordo com o comparator. [=

shadowzaum

Mas em questão de performance depois? Pois o sistema é um sistema de abertura de chamados e o numero de registros só tende a crescer. A maquina que ele ta instalado não é uma das melhores, até porque não precisa.
Mas o que eu realmente fico com medo é isso, questão de performance, porque vai ser uma area que os usuarios (tanto o pessoal do suporte, quanto clientes) vão estar usando direto.

Valeu pela ajuda ai de qualquer forma. =D

Criado 30 de julho de 2012
Ultima resposta 30 de jul. de 2012
Respostas 4
Participantes 2