Hibernate - persistindo em tabelas com chave composta

Pessoal, o problema é o seguinte… Trabalho em um sistema onde o hibernate fica no servidor de aplicação e os objetos retornados do próprio são convertidos para VOs (ou DTOs) e passados para o cliente… Até ai tudo bem… O problema que é um sistema legado e as tabelas possuem várias chaves compostas. E especificamente em um programa do sistema ele trabalha com uma cascata de aproximadamente 14 tabelas 1 filha da outra…
Certo, o problema é que ao fazer um update da tabela pai ele tenta inserir as filhas, pois ele não sabe se os objetos já foram persistidos ou não… A única solução que me ocorreu foi criar uma propriedade nos VOs que indica se ele veio do banco ou não, entretanto isso não me parece uma boa solução…

Alguém já passou por isso? Ou tem alguma idéia??

Vallew

O saveOrUpdate do Hibernate nao faz isto? pesquise sobre o “unsaved-value”.
Resumindo se seu campo de chave estiver null, o Hibernate insere. Caso contrário ele faz update.

O problema é que o mesmo não pode ser nulo… Quando vc usar composite keys é obrigado a setar as chaves…
Para testar se está persistido vc pode utilizar uma classe que possua um flag indicando isso e conforme for, através de um interceptor vc avisa o hibernate que a mesma está persistida…

Entretanto como a classe foi pro cliente sem essa informação, na volta eu não sei se ela já foi persistida ou não…

Não sei se consegui explicar o problema!!!

Mas valeu assim mesmo!!

Estou tendo o mesmo problema ao tentar atualizar um campo da minha entidade que possui uma chave composta:

		//Montando objeto
		servico.setValorUnitario(valor);
		ServicoHasPrestadorDeServicoPK pk = new ServicoHasPrestadorDeServicoPK();			
		pk.setServicoIdServico(ServicoDAO.getInstance().load(id_servico,s));
		pk.setPrestadorDeServicoIdPrestadorDeServico(PrestadorDeServicoDAO.getInstance().load(id_prestador,s));			
		servico.setId(pk);

dao.saveOrUpdate(servico);

Porém dá o seguinte erro:

net.sf.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session

Alguém sabe o que eu poderia fzr para atualizar essa tabela associativa??

Pelo que entendi, vocês querem usar saveOrUpdateCopy e não saveOrUpdate.

Pessoal estou com o mesmo problema e sinceramente não entendi o que os amigos tentaram dizer.

Quem estava com esse problema, conseguiu resolver???
O pessol “expert” podia nos ajudar???

Obrigado!