| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/01/2007 11:12:05
|
Insônia
Debugger
![[Avatar]](/images/avatar/c344336196d5ec19bd54fd14befdde87.png)
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 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/01/2007 12:01:56
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/01/2007 12:17:25
|
Insônia
Debugger
![[Avatar]](/images/avatar/c344336196d5ec19bd54fd14befdde87.png)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/01/2007 12:50:06
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 04/01/2007 21:38:57
|
Insônia
Debugger
![[Avatar]](/images/avatar/c344336196d5ec19bd54fd14befdde87.png)
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 |
|
|
 |
|
|