Persistência enum JPA [RESOLVIDO]  XML
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Autor Mensagem
worldfernando
Thread.start()
[Avatar]

Membro desde: 10/02/2008 12:52:49
Mensagens: 42
Localização: Curitiba/PR
Offline

Olá pessoal,


Seguinte eu estou precisando armazenar esse ENUM abaixo, porém gostaria de gravar no banco somente o ID alguém poderia me dar um auxilio?



Obrigado

This message was edited 2 times. Last update was at 18/07/2011 11:50:01


Sempre aprendendo
[MSN]
ddark.emanu
JavaChild
[Avatar]

Membro desde: 06/10/2010 16:09:16
Mensagens: 118
Localização: Cianorte - PR
Offline

Trabalho com enuns dessa maneira ;



Na classe onde vou chamar a ENUM uso a annotation @Enumerated , caso queira salvar a posição da enum (iniciando por 0) ou @Enumerated(EnumType.STRING) caso queira salvar a descrição

ex :

This message was edited 2 times. Last update was at 18/07/2011 09:44:45


EmmanueL Neri
[Email] [MSN]
worldfernando
Thread.start()
[Avatar]

Membro desde: 10/02/2008 12:52:49
Mensagens: 42
Localização: Curitiba/PR
Offline

Então amigo é quase isso mas ocorre um problema de gravar a posição, pois caso eu adicione mais uma opção do enum entres os já existentes quando eu for resgatar do banco pode vir errado, então eu gostaria de gravar o meu getId()


Sempre aprendendo
[MSN]
worldfernando
Thread.start()
[Avatar]

Membro desde: 10/02/2008 12:52:49
Mensagens: 42
Localização: Curitiba/PR
Offline

caso não tenha como fazer vou ter que gravar a posição mesmo.

Sempre aprendendo
[MSN]
Cristiano de Barros
JavaBaby
[Avatar]

Membro desde: 16/03/2008 21:11:04
Mensagens: 78
Localização: Florianópolis
Offline

Olá,

Infelizmente isto que você deseja fazer não é possível.
Porém, com a anotação @Enumerated, você pode escolher entre duas maneiras de armazenamento no banco, cada uma com seu prós e contras:

@Enumerated(EnumType.STRING)
Grava o nome do enum no banco de dados. No seu exemplo seriam persistidos os valores AVISTA, PRAZO, etc.
A vantagem deste é que você pode trocar a ordem dos enums a qualquer momento e sua aplicação continuará funcionando sem problemas, e a desvantagem é que você não poderá mexer nos nomes.

@Enumerated(EnumType.ORDINAL) (Que é o default)
Grava a ordem do enum no banco de dados. No seu exemplo seriam persistidos os valores 0 para AVISTA, 1 para PRAZO, etc.
A vantagem deste em relação ao anterior, é que você pode renomear os enums a qualquer momento e sua aplicação continuará funcionando sem problemas, porém desta maneira você não poderá mudar a ordem dos enums.

Seja qual for a maneira escolhida, não é tão problemático criar um novo valor para um enum, desde que você respeite a forma que está sendo persistido no banco de dados.

Espero ter ajudado!
Abraço

This message was edited 1 time. Last update was at 18/07/2011 10:30:20

worldfernando
Thread.start()
[Avatar]

Membro desde: 10/02/2008 12:52:49
Mensagens: 42
Localização: Curitiba/PR
Offline

Blz...


vou trabalhar com ordinal mesmo obrigado a todos

Sempre aprendendo
[MSN]
fpierin
Smalltalk
[Avatar]

Membro desde: 25/10/2010 10:04:44
Mensagens: 3
Localização: São Paulo
Offline

Olá worldfernando,

Como o Cristiano falou, só por anotações você não vai conseguir fazer o que deseja, no entanto você poderia fazer o seguinte:



E então na classe em que você persiste esse enumerado você declara :



e os getters e setters ficariam:




Abcs,

This message was edited 1 time. Last update was at 18/07/2011 12:40:01


Bacharel em Sistemas de Informação pela USP
Desenvolvedor Java/Delphi/Php/Ruby
Blog: http://oreboladodeturing.wordpress.com
Twitter: http://www.twitter.com/fpierin
Yahoo messenger: felipe.pierin[at]yahoo.com.br
[Email] [WWW] [Yahoo!] [ICQ]
worldfernando
Thread.start()
[Avatar]

Membro desde: 10/02/2008 12:52:49
Mensagens: 42
Localização: Curitiba/PR
Offline

Então pessoal eu compartilho abaixo a solução que conseguimos por aqui espero que ajude outros com o mesmo problema um abraço a todos





abaixo o main



assim eu gravo o ordinal mas consigo a lista ordenada

o resultado é

[Ativo, Circulante, Passivo]

Sempre aprendendo
[MSN]
 
Índice dos Fóruns » Persistência: Hibernate, JPA, JDBC e outros
Ir para:   
Powered by JForum 2.1.8 © JForum Team