Converter String para Enum

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 :wink:
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.