Olá pessoal,
Seguinte eu estou precisando armazenar esse ENUM abaixo, porém gostaria de gravar no banco somente o ID alguém poderia me dar um auxilio?
[code]public enum EnumFormaPagamento {
AVISTA(1,"À vista"),
PRAZO(2,"À prazo"),
OUTROS(3,"Outros");
private int id;
private String descricao;
private EnumFormaPagamento(int id, String descricao) {
this.id = id;
this.descricao = descricao;
}
public String getDescricao() {
return descricao;
}
public int getId() {
return id;
}
@Override
public String toString() {
return this.descricao;
}
}[/code]
Obrigado
Trabalho com enuns dessa maneira ;
public enum FormaPagamento{
AVISTA("A Vista"),
PRAZO("A Prazo"),
OUTRO("Outro");
private String descricao;
private StatusSolicitacao(String descricao) {
this.descricao = descricao;
}
Na classe onde vou chamar a ENUM uso a annotation @Enumerated , caso queira salvar a posição da enum (iniciando por 0) ou @Enumerated(EnumType.STRING) caso queira salvar a descrição
ex :
public class Venda {
...
@Enumerated
private FormaPagamento formaPagamento;
}
Então amigo é quase isso mas ocorre um problema de gravar a posição, pois caso eu adicione mais uma opção do enum entres os já existentes quando eu for resgatar do banco pode vir errado, então eu gostaria de gravar o meu getId()
caso não tenha como fazer vou ter que gravar a posição mesmo.
Olá,
Infelizmente isto que você deseja fazer não é possível.
Porém, com a anotação @Enumerated, você pode escolher entre duas maneiras de armazenamento no banco, cada uma com seu prós e contras:
@Enumerated(EnumType.STRING)
Grava o nome do enum no banco de dados. No seu exemplo seriam persistidos os valores AVISTA, PRAZO, etc.
A vantagem deste é que você pode trocar a ordem dos enums a qualquer momento e sua aplicação continuará funcionando sem problemas, e a desvantagem é que você não poderá mexer nos nomes.
@Enumerated(EnumType.ORDINAL) (Que é o default)
Grava a ordem do enum no banco de dados. No seu exemplo seriam persistidos os valores 0 para AVISTA, 1 para PRAZO, etc.
A vantagem deste em relação ao anterior, é que você pode renomear os enums a qualquer momento e sua aplicação continuará funcionando sem problemas, porém desta maneira você não poderá mudar a ordem dos enums.
Seja qual for a maneira escolhida, não é tão problemático criar um novo valor para um enum, desde que você respeite a forma que está sendo persistido no banco de dados.
Espero ter ajudado!
Abraço
Blz…
vou trabalhar com ordinal mesmo obrigado a todos
Olá worldfernando,
Como o Cristiano falou, só por anotações você não vai conseguir fazer o que deseja, no entanto você poderia fazer o seguinte:
public enum EnumFormaPagamento {
AVISTA(1,"À vista"),
PRAZO(2,"À prazo"),
OUTROS(3,"Outros");
private int id;
private String descricao;
private EnumFormaPagamento(int id, String descricao) {
this.id = id;
this.descricao = descricao;
}
public String getDescricao() {
return descricao;
}
public int getId() {
return id;
}
public static EnumFormaPagamento parse(int id) {
EnumFormaPagamento enumFormaPagamento = null;
for (EnumFormaPagamento item : EnumFormaPagamento.values()) {
if (item.getId() == id) {
enumFormaPagamento = item;
break;
}
}
return enumFormaPagamento;
}
@Override
public String toString() {
return this.descricao;
}
}
E então na classe em que você persiste esse enumerado você declara :
@Column
private int enumId;
e os getters e setters ficariam:
public EnumFormaPagamento getEnumFormaPagamento () {
return EnumFormaPagamento.parse(this.enumId);
}
public void setEnumFormaPagamento(EnumFormaPagamento enumFormaPagamento) {
this.enumId = enumFormaPagamento.getId();
}
Abcs,
Então pessoal eu compartilho abaixo a solução que conseguimos por aqui espero que ajude outros com o mesmo problema um abraço a todos

[code]public enum EnumTeste {
circulante("Circulante"),
passivo("Passivo"),
ativo("Ativo");
private String descricao;
private EnumTeste(String descricao) {
this.descricao = descricao;
}
@Override
public String toString() {
return this.descricao;
}
public final static Comparator comparatorEnumTeste = new Comparator<EnumTeste>() {
@Override
public int compare(EnumTeste t, EnumTeste t1) {
return t.descricao.compareTo(t1.descricao);
}
};
}[/code]
abaixo o main
[code]public static void main(String[] args) {
// TODO code application logic here
List listaTeste = new LinkedList();
EnumTeste[] list = EnumTeste.values();
TreeSet ts = new TreeSet(EnumTeste.comparatorEnumTeste);
ts.addAll(Arrays.asList(list));
for (EnumTeste teste : ts){
listaTeste.add(teste);
}
System.out.println(listaTeste);
}[/code]
assim eu gravo o ordinal mas consigo a lista ordenada
o resultado é
[Ativo, Circulante, Passivo]