Persistencia de ENUM, EnumType.ORDINAL

6 respostas
A
@Column(name = "CS_CACHORRO", length = 1)
@Enumerated(EnumType.ORDINAL)
private TipoCachorro tipoCachorro;

public enum TipoCachorro {
NAOINFORMADO(9, “PASTOR ALEMÃO”),
NAOINFORMADO(20, “NAO INFORMADO”),

eetc....

}

Estou com um problema. Usei as anotações jpa acima. Só que fazendo isso é gravado a posição do atributo no Enum e não o código.

Como faço para gravar o código?

6 Respostas

G

Internamente o JPA pega o valor do retorno do método XXXEnum.ordinal(). Como você não consegue sobrescrever esse método, terá que usar o ordinal do Enum, que é o sequencial da ordem dos valores.

O mesmo vale para o EnumType.STRING que pega retorno do método XXXEnum.name().

O que você pode fazer, só que assim seu código terá que ser especifico para a implementação JPA, que é criar um UserType (no caso do Hibernate) para salvar esse enum.

A

não existe outra solução?

G

Que eu conheça não. Mas tem um livro de receitas bem bom no site do hibernate para solucionar essas questões. Tem vários itens sobre enums e pseudo-enums.

https://www.hibernate.org/37.html

B

o hibernate fornece a interface usertype que permite vc criar seus próprios tipos, ou seja, um converter que é executado quando vc le ou grava do banco:

http://weblog.dangertree.net/2007/09/23/mapping-java-5-enums-with-hibernate/

A

A gente tá usando EclipseLink aqui.

G

alexswb:
A gente tá usando EclipseLink aqui.

http://wiki.eclipse.org/Customizing_the_EclipseLink_Application_(ELUG)

Criado 11 de novembro de 2009
Ultima resposta 11 de nov. de 2009
Respostas 6
Participantes 3