Ou então voce poderia gravar o valor ordinal da Enum no banco.
Sim, é bem mais comum gravar no bd um código numérico para campos tipo desse tipo.
Mas eu não faria pelo valor ordinal não, é meio arriscado zuar tudo na hora de incluir um novo valor no Enum… ao invés disso, colocaria o código como atributo.
Mas se deixar como atributo voce precisa fazer a busca entre todos os enums para ver qual é o certo.
Não sei pra que tirar ifs do codigo para colocar enums sendo que pra encontrar o enum certo voce faz um for com if(algo).
O unico problema de guardar o valor ordinal é colocar novos elementos antes de algum que já existe, se forem colocados cada vez como ultimo nada sera afetado.
Mas como eu sou um grande medroso prefiro não arriscar
Se houver testes unitários até dá pra garantir que não vai quebrar nada depois da manutenção, mas não é o caso de nenhum projeto em que eu tenha trabalhado.
[quote=Mark_Ameba]Mas se deixar como atributo voce precisa fazer a busca entre todos os enums para ver qual é o certo.
Não sei pra que tirar ifs do codigo para colocar enums sendo que pra encontrar o enum certo voce faz um for com if(algo).[/quote]
Eu tenho um pequeno “pattern” para não precisar desses for com if espalhados pelo código. É só criar no próprio Enum um método de busca, que depois é chamado assim:
int codigo = blablabla();
tipoUsuario = TipoUsuarioEnum.getByCodigo(codigo);
Além disso, o ordinal tem base 0, o que é meio estranho de armazenar como código (claro que esse “estranho” também depende do gosto de cada um).
Mesmo deixando o pattern no código ainda assim voce não elimina a procura pelo Enum… só passa a responsabilidade para o Enum fazer isso.
Ter como base 0 não é tão ruim. Principalmente por que este numero não serve pra muita coisa por que o que importa é ao carregar o objeto ter o Enum correto no lugar.