@ManyToMany - JPA: o que fazer quando um dos lados da relação já existe?

2 respostas
saviobarr

Olá amigos,
Eu tenho uma entidade PROFISSIONAL e uma entidade EMPRESA. Um PROFISSIONAL pode trabalhar em várias empresas. Uma EMPRESA pode ter vários profissionais. Relação @ManyToMany.
Acontece que um dos lados da relação (EMPRESA) já existe, e quando dou um manager.persist(profissional), o EntityManager tenta inserir novamente a empresa que já existe, e logicamente da erro de PK. Como fazer para o EntityManager entender que quero gravar apenas PROFISSIONAL e a associação na tabela associativa? Abaixo trecho do código das entidades onde faço essa associação

//trecho da relação na entity PROFISSIONAL
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="profissional_empresa",
joinColumns=@JoinColumn(name="id_profissional"),
inverseJoinColumns=@JoinColumn(name="id_empresa")
public List<Empresa> getEmpresas() {
        return empresas;
}
//Trecho do código da relação em EMPRESAS
@ManyToMany(mappedBy="empresas")
public List<Profissional> getProfissionais() {
       return profissionais;
}

[]'s

Sávio

2 Respostas

georgesq

em vez de vc usar persist, use merge, q se não existir irá persistir other case, irá fazer update.

saviobarr

Olá George. Depois que mandei a msg, testei com o merge, e funcionou numa app de teste que fiz em casa. Daqui a pouco vou testar no ambiente no desenvolvimento onde tive o problema.
Valeu pela dica!
[]'s

Sávio

Criado 29 de outubro de 2008
Ultima resposta 29 de out. de 2008
Respostas 2
Participantes 2