Dúvidas sobre MERGE (JPA - EJB3)

2 respostas
frederico.vieira

Pessoal, eu tenho uma dúvida em relação ao método merge.

Se eu tenho no banco o objeto:

Funcionario
id = 1
nome = "Fulano"
cpf = [telefone removido]

Telefone
id = 2
numero = 99999999
func_id = 1
id = 3
numero = 99999999
func_id = 2

Agora, eu altero o objeto para:

Funcionario
id = 1
nome = "Fulano"
cpf = [telefone removido]

Telefone
id = 2
numero = 99999999
func_id = 1

Removi o telefone de id número três e chamo o manager.merge(f).

Ele não deveria remover esse telefone?

No meu caso, não esta removendo e nenhuma exceção é disparada. Ou o método realmente não faz isso?

Att,

Fred

2 Respostas

Paulo_Silveira

ele so vai remover o relacionamento, isso ele esta fazendo nao eh?

creio que o que voce esta precisando é do ORPHAN_DELETE. JPA não tem suporte a isso, mas se voce esta usando JPA com Hibernate, voce tem esse suporte sim. faça assim no relacionamento de funcionario com telefone:

class Funcionario {
  @org.hibernate.Cascade(DELETE_ORPHAN)
  private List<Telefone> telefones;
}
frederico.vieira

Cara, realmente a JPA não dá suporte a essa funcionalidade.

Coloquei a interface Cascade do Hibernate e estou chamando o CacadeType.DELETE_ORPHAN

Porém, agora o seguinte erro esta ocorrendo:

javax.persistence.EntityNotFoundException: deleted entity passed to persist: [br.com.pacote.entidades.usuario.Permissoes#]

Eu usei aquele conceito de Funcionário e Telefone só para exemplificar o minha situação. Na relalidade, eu tenho uma entidade de Usuário que tem várias permissões de acesso ao sistema (uma coleção). Meu objeto esta completo, não faltando nada, e seu eu chamo tanto manager.merge(u) como manager.remove(u), essa exceção esta sendo disparada.

Tem alguma idéia do que possa ser?

Criado 7 de março de 2008
Ultima resposta 7 de mar. de 2008
Respostas 2
Participantes 2