@Enumerated com JPA

9 respostas
G

Caros Amigos,

Como defino valores para a anotação @Enumerated do JPA.Há alguma documentação oficial para consultas sobre JPA?

Aguardo Resposta.

UM abraço

9 Respostas

Leozin

@Enumerated server para você fazer com que o valor X seja um enum, por exemplo

enum Carro { FUSCA(0), GOL(1)) 
// Implementar construtores e outros métodos chatosde Enum com valores
}

Na tua entidades, vamos supor que seja assim: ID, nome do dono e tipo do carro

@Entity
public class DonoCarro {

@Id
private int id;

@Enumerated
@Column(name="id_carro")
private Carro carro;

private String nome;

// construtores, getters e setters

Algumas observações
- a anotação @Enumerated pode ser especificada se é pra usar ORDINAL ou STRING, depende do que o teu campo retornar
- nesse caso, a tabela DonoCarro tem que ter um campo number(X,0) (onde X é qualquer valor)
- usar enums com entidades é muito legal :P
- o único problema é que, se você possuir entidades fracas e adicionar uma nova no banco de dados, precisará adicionar no enum também :(, por exemplo, digamos que esses carros, no teu sistema sejam fixos. Tem uma tabela lá que é ID e NOME, ou seja, 0 é "Fusca" e 1 é "Gol". Se você adicionar um novo valor nessa tabela, terás que atualizar o sistema e adicionar o novo enum

G

Obrigado esclareceu minha duvida!!!

Um abraço

vinicius_roc

Desculpem estar ressucitando esse topico, é que fiquei com uma duvida em relação a isso tambem.

Estou querendo usar Enum para uma coluna de categoria do tipo inteiro,

Gostaria de saber se como faria para pegar a descricao de algum item.

Teria quer ter um metodo getDescricao() com um switch, ou tem algum jeito melhor?

Vlw

P

você pode sobreescrever o toString() no Enum…

@Override
     public String toString() {
          return descricao;
     }
vinicius_roc

Certo, mas eu teria que ter um switch para saber qual é o codigo certo?

public String toString(){

      switch (codCategoria){

             case 0: {
                   return "cat 1";
             }

             case 1: {
                   return "cat 2";
             }
      }
}
P
public enum Situacao {
NAO_EXISTE(-1, "Inexistente"), 
	DISPONIVEL(1, "Adquirido"),
	CANCELADO(2, "Cancelado"),
	INUTILIZADO(3, "Inutilizado"),
	REMESSA(4, "Devolvido ao fabricante"),
                VENDIDO(5,"Vendido");
	
	private int codigo;
	private String descricao;
	
	private Situacao(int codigo, String descricao) {
		this.codigo = codigo;
		this.descricao = descricao;
	}
	
	public int toInt() {
		return this.codigo;
	}
	
	public static Situacao valueOf(int i) {
		switch (i) {
			case -1: return NAO_EXISTE;
			case 1: return DISPONIVEL;
			case 2: return CANCELADO;
			case 3: return INUTILIZADO;
			case 4: return REMESSA;
			case 5: return VENDIDO;
			default: return null;
		}
	}

	@Override
	public String toString() {
		return descricao;
	}
vinicius_roc

Então, minha duvida eh exatamente essa que você colocou.

Que não sei se funciona e queria entender melhor.

No banco eu só vou salvar os numeros certo?

Como o hibernate vai se achar para salvar ou pegar esse valor no banco? é atraves do valueOf?

Valew

P

creio que sim, já fiz isso com letras…

vinicius_roc

Valew, vou testar e qualquer coisa volto aqui.

Muito obrigado pelas rapidas respostas.

Criado 7 de janeiro de 2008
Ultima resposta 27 de jan. de 2011
Respostas 9
Participantes 4