Dúvida co JPA + Enum

9 respostas
GraveDigger

E ai galera, td certo ?

Seguinte, tenho esse enum:

public enum SupplierType {
	
	TOURISTIC("T"),
	OTHER("O");
	
	private final String type;
	
	SupplierType(String type) {
		this.type = type;
	}

	public String getType() {
		return type;
	}
	
}

que foi mapeado em uma entidade minha da seguinte forma:

@Enumerated(EnumType.STRING)
@Column(name="Tipo")
private SupplierType supplierType;

Quando tento ler isso do banco, ocorre o seguinte erro:

Unknown name value for enum class br.com.empresa.model.entity.SupplierType: T

Ou seja, ele está tentando achar o enum fazendo algo como: ServiceType.T. Quando na verdade eu esperava q ele passasse o T como parametro para o Enum para que eu tivesse um ServiceType.TOURISTIC.

O que fazer nesse caso ?

Obs: Minha coluna no banco de dados só suporta char(1).

Grato

9 Respostas

javax.skol

Então é ao contrário
T(“TOURISTIC”),
O(“OTHER”);

GraveDigger

psyltrance:
Então é ao contrário
T(“TOURISTIC”),
O(“OTHER”);

O problema dessa abordagem, eh que o valor “TOURISTIC” e “OTHER” não serão usados nunca.

Minha idéia é que no código esteja:

SupplierType.TOURISTIC

Com essa sua abordagem, ficaria:

SupplierType.T

Resolveria o problema do banco, mas jogaria o problema para o código =/

Grato

71C4700

Então tenta resolver no banco, ja que voce nao quer mecher no codigo.
Mas tambem concordo com psyltrance.

Ou voce meche no codigo ou no banco, já que voce quer quer seja mais transparente para voce, seria melhor mecher banco.

GraveDigger

71C4700:
Então tenta resolver no banco, ja que voce nao quer mecher no codigo.
Mas tambem concordo com psyltrance.

Ou voce meche no codigo ou no banco, já que voce quer quer seja mais transparente para voce, seria melhor mecher banco.

Olá,

O ponto não é que não quero alterar o código, posso fazer isso sem problemas.

Mas a idéia desse paramêtro no ENUM é justamente dar um nome mais claro(TOURISTIC) para algo que não faz tanto sentido(T).

Não é possivel eu salvar o T e no código referenciar: ServiceType.TOURISTIC ??

Já que TOURISTIC é apenas um alias para meu valor real, imagino que isso seja possível.

Grato

71C4700

Uma discurção no guj sobre enum

http://www.guj.com.br/posts/list/97699.java#525664

GraveDigger

71C4700:
Uma discurção no guj sobre enum

http://www.guj.com.br/posts/list/97699.java#525664

Mas pela sua sugestão do outro topic meu tipo de dado do banco teria que ser númerico, o que não é o caso

GraveDigger

Viva o encapsulamento.

Não sei se é a melhor alternativa(por isso deixarei o topic como não resolvido ainda).

Mas é uma solução.

Alterei meu atributo, agora ele é uma string, tal qual no banco de dados

Porém, aqui estão meus getters e setters:

public SupplierType getSupplierType() {
    return SupplierType.valueOf(this.supplierType);
}
public void setSupplierType(SupplierType supplierType) {
	this.supplierType = supplierType.getType();
}

Mas ainda assim espero que haja uma forma via annotations de resolver isso.

Grato

71C4700

Agora sim

http://www.guj.com.br/posts/list/72625.java#381412

Acredito que seja este parametro do construtor que seja final ao inves da variavel.

Da uma olhada

GraveDigger

71C4700:

Agora sim

http://www.guj.com.br/posts/list/72625.java#381412

Acredito que seja este parametro do construtor que seja final ao inves da variavel.

Da uma olhada

Na verdade isso não faz diferença nesse caso.

Mesmo assim obrigado :slight_smile:

Criado 20 de novembro de 2008
Ultima resposta 20 de nov. de 2008
Respostas 9
Participantes 3