[hibernate] usar generator em property (nao id)  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
Insônia
Debugger
[Avatar]

Membro desde: 24/03/2005 23:06:33
Mensagens: 73
Offline

Pessoal,
meu conhecimento em hibernate é um tanto qto limitado, por isso desculpem-me caso essa pergunta for muito estúpida.

Li na documentacao de referencia que o elemento 'generator' só pode ser usado em PKs

A minha tabela possui um atributo que cuida da ordenacao dos registros. Este atributo [no insert] deve ser preenchido com o valor da maior ordenacao + 1.

A forma mais convencional que eu pensei seria, antes de inserir, verificar qual o maior valor [entre os registros já existentes] e atribuir ao novo registro o maior valor + 1. Porem, achei esse metodo um tanto qto inseguro [se a busca e insert nao fizerem parte de uma regiao crítica].

Como isso poderia ser feito utilizando o hibernate? Ou seja: posso delegar para o hibernate a tarefa de atribuir ao novo registro o valor da maior ordem + 1?

Acho que a ideia é um tanto quanto parecida com o que o elemento generator pode fazer para ids. Porem, no meu caso a ordenacao nao faz parte da pk da tabela.

Alguem já passou por isso? Alguma sugestão?

SCJP, SCWCD
fdalmarco
Entusiasta Java

Membro desde: 27/12/2006 20:09:36
Mensagens: 20
Localização: Curitiba - Pr
Offline



Esse generator tem que ser criado no banco. Pode ser criado assim:



ou com um numero determinado

(a sequencia ira começar em 100)

Depois disso o hibernate faz tudo sozinho.


Fernando Vertuan Dalmarco
Deltacore Technologies
Insônia
Debugger
[Avatar]

Membro desde: 24/03/2005 23:06:33
Mensagens: 73
Offline

Olá Fernando, obrigado pela sua resposta.

Pelo que eu li na documentaçao de referencia (5.1.4 - id), a tag <id> serve para mapear a Primary Key da tabela.

No meu caso [pelo que eu entendi] nao devo (posso??) utilizar o elemento generator justamente pelo fato da minha propriedade nao fazer parte da PK da tabela

Minha tabela é simples:

- ID (pk)
- NOME
- POSICAO

O atributo POSICAO serve para informar a ordem de visualizacao de cada registro da tabela (como uma fila). Essa ordem pode ser alterada e, na criacao de um novo registro, deve possui o valor da maior POSICAO existente, acrescido de 1 (garantindo assim que novos registros serao enviados para o fim da fila)

Como posso utilizar o hibernate para atribuir o valor de POSICAO + 1 durante o insert? Terei mesmo que utilizar a propriedade POSICAO como PK da tabela (<id> para que o hibernate possa realizar essa atribuicao automaticamente durante o INSERT?

Obrigado

SCJP, SCWCD
fdalmarco
Entusiasta Java

Membro desde: 27/12/2006 20:09:36
Mensagens: 20
Localização: Curitiba - Pr
Offline

Insônia,

Não tinha me atentado ao fato dele nao ser PK.

Eu não conheco uma maneira de fazer com que o hibernate faça isso que vc quer.

Eu particularmente faria um:



Um pouco antes do commit.

Fernando Vertuan Dalmarco
Deltacore Technologies
Insônia
Debugger
[Avatar]

Membro desde: 24/03/2005 23:06:33
Mensagens: 73
Offline

Olá Fernando,
obrigado pela sua resposta.

Pela falta de posts, acredito que seja esta a única solução existente

Abraços!

SCJP, SCWCD
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team