| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/06/2008 09:44:13
|
dango
JavaEvangelist
![[Avatar]](/images/avatar/c8a19a6140e2e852b3f66.gif)
Membro desde: 09/11/2002 08:56:47
Mensagens: 497
Localização: Catanduva SP
Offline
|
Estou brigando com esse problema alguns dias já.
Tenho duas classes persistentes conforme descritas abaixo, e mapeadas
para as tabelas correspondentes.
A classe Person possui os atributos "fieldA" e "fieldB" que identificam um registro em 'persons' exclusivamente. Mas estou tendo problemas com o identificador (id).
Se eu tenho um objeto Person transiente e quero salvá-lo no banco eu preciso antes verificar se já não existe um registro no banco cujos atributos
"fieldA" e "fieldB" coincidam. No caso de já existir eu preciso apenas atualizar aquele registro baseado na instância do objeto que eu recebo no argumento do método save(Person). Se não existir, um novo Person será salvo no banco de dados.
O comportamento que eu estou observando, com a implementação atual do método save(Person) é: ele atualiza o registro na tabela 'persons' corretamente mas replica os filhos (sons) na tabela 'sons'. Não tenho idéia do que fazer para corrigir o problema.
Seguem as tabelas, mapeamentos (JPA) e a implementação do método save(Person).
Mapeamento:
E a implementação do método save(Person):
Na verdade o título deveria ser "Atualização através de um objeto transiente".
This message was edited 1 time. Last update was at 20/06/2008 09:46:50
|
Shine on you crazy diamond. |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/06/2008 14:49:58
|
Filipe Sabella
GUJ Expert
Membro desde: 12/03/2003 11:25:57
Mensagens: 4680
Offline
|
O argumento "person" passado para o método save() possui os fillhos populados? Se sim, estes filhos estão com a PK populada?
|
Former LIPE. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/06/2008 17:12:21
|
marciocamurati
JavaEvangelist
![[Avatar]](/images/avatar/7371364b3d72ac9a3ed8638e6f0be2c9.jpg)
Membro desde: 29/05/2004 14:54:36
Mensagens: 322
Localização: São Paulo
Offline
|
Só complementando o comportamento que você espera é que caso existam elementos populados em Sons ocorra um "sincronismo" ou seja apagar os diferentes, atualizar os com o mesmo ID e inserir os novos?
[]s
|
Marcio Camurati |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/06/2008 22:12:06
|
dango
JavaEvangelist
![[Avatar]](/images/avatar/c8a19a6140e2e852b3f66.gif)
Membro desde: 09/11/2002 08:56:47
Mensagens: 497
Localização: Catanduva SP
Offline
|
Filipe Sabella wrote:O argumento "person" passado para o método save() possui os fillhos populados? Se sim, estes filhos estão com a PK populada?
Rapaz!!! Será?
É, na prática sim.. os IDs não estão definidos nos filhos. É que o objeto "Person" (já populado com os "Son"s) vem de uma fonte que não tem idéia de persistência. Por isso não tenho IDs. Na verdade eu quero mesmo um sincronismo (citação abaixo). Mas já funciona muito bem, se todos os "Son"s forem excluídos antes de os novos serem incluídos. Eu tentei isso usando um session.delete(aperson) e um session.evict(aperson) mas, claro, não funcionou.
marciocamurati wrote:Só complementando o comportamento que você espera é que caso existam elementos populados em Sons ocorra um "sincronismo" ou seja apagar os diferentes, atualizar os com o mesmo ID e inserir os novos?
Exato!
Conforme disse acima, se eu conseguir remover os "Son"s antes de atualizar o "Person" que contém outros "Son"s (ou os mesmos, semanticamente) já fica jóia.
This message was edited 1 time. Last update was at 20/06/2008 22:12:46
|
Shine on you crazy diamond. |
|
|
 |
|
|
|
|