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…
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…