Olá, tenho um enum em java e uma entidade que tem um atributo com o tipo do enum, precisa mapear em JPA mas da maneira que consegui, quando gravo ele grava no banco o nome do atributo do enum
Quando gravo a pessoa no banco o campo sexo fica como: Masculino/Feminino, mas quero que fique “M” ou “F” pois vou criar a tabela e o campo sexo vai ser char(1).
da forma q ta ela vai salvar o nome da constante..
mas se vc quer salvar apenas um caracters...
sem mudar o nome da constante
use
@Enumerated(EnumType.ORDINAL)
ai no banco ira ficar armazenado a posicao da sua constante.
C
cleverson_
mauriciot.silva:
@Enumerated(EnumType.STRING)
da forma q ta ela vai salvar o nome da constante…
mas se vc quer salvar apenas um caracters…
se mudar o nome da constante
use
ai no banco ira ficar armazenado a posicao da sua constante.
Mas é isso que eu não quero fazer, gravar posicoes das constantes do enum, quero que fique os caracteres: “M” para Masculino e “F” para Feminino e mantendo os nomes das constantes.
blackout
Cria um método get pra variável sexo no teu enum, e quando for passa-lo, chama o get.
Algo como:
PessoaSexo.getValue();
C
cleverson_
blackout:
Cria um método get pra variável sexo no teu enum, e quando for passa-lo, chama o get.
Algo como:
PessoaSexo.getValue();
Mas como eu chamaria este método get, então sobrescrevendo o toString funcionaria?
Por que se eu sobrescrever o toString quando dou um System.out.println(PessoaSexo.Feminino) imprime “F”, mas para gravar o JPA tenta inserir no banco o nome da constante.
publicenumPessoaSexo{Masculino("M"),Feminino("F")privateStringvalor;privatePessoaSexo(Stringvalor){this.valor=valor;}publicStringtoString(){returnvalor;}}System.out.println(PessoaSexo.Feminino);// Resulta em "F"System.out.println(PessoaSexo.Masculino);// Resulta em "M"
Hebert_Coelho
cleverson_:
Por que se eu sobrescrever o toString quando dou um System.out.println(PessoaSexo.Feminino) imprime “F”, mas para gravar o JPA tenta inserir no banco o nome da constante.
Você tentou sobrescrevendo o toString?
C
cleverson_
jakefrog:
cleverson_:
Por que se eu sobrescrever o toString quando dou um System.out.println(PessoaSexo.Feminino) imprime “F”, mas para gravar o JPA tenta inserir no banco o nome da constante.
Você tentou sobrescrevendo o toString?
Sim eu sobreescrevi e esses são os resultados:
System.out.println(PessoaSexo.Feminino); // Resulta em "F"
System.out.println(PessoaSexo.Masculino); // Resulta em "M"
Mas para persistir o JPA tenta persistir o nome da constante, não o valor que passo como parâmetro do construtor.
Se não tem como gravar um char para uma constante, entao temos que de certa forma moldar o banco de dados de acordo com a maneira que o framework trabalha.
No caso que citei ate não teria tanta importância, pois serão sempre dois valores e os nomes não são longos, mas vai ter casos em que teria varias constantes com nomes bem mais longos, e no banco eu teria que gravar tudo como string.
mauriciot.silva
Entao vdd tem ate um artigo no blog da caelum
sobre JPA vs DataBases
o mais importante eh q as informacoes estejam
acessivel para o framework (JPA/Hibernate)
…
a nao ser que vc queira voltar no tempo e usar JDBC.
ai fica ao seu criterio