Atualização de objeto transiente  XML
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Autor Mensagem
dango
JavaEvangelist
[Avatar]

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.
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.
[ICQ]
marciocamurati
JavaEvangelist
[Avatar]

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
[WWW] [MSN] [ICQ]
dango
JavaEvangelist
[Avatar]

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.
 
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Ir para:   
Powered by JForum 2.1.8 © JForum Team