Persistencia de ENUM, EnumType.ORDINAL

@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?

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.

não existe outra solução?

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

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 gente tá usando EclipseLink aqui.

[quote=alexswb]A gente tá usando EclipseLink aqui.
[/quote]

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