1
resposta

Remoçao de relacionamento many-to-many usando JTA

Olá Pessoal,

Montei um projeto para me aproximar o ambito profissional no qual estou inserido com uma api com JEE8 com wildfly 20 e mysql via docker. Estou com o seguinte problema: fiz um relacionamento many-to-many bidirecional, em que ao remover o a entidade mais forte, consigo deletar os relacionamentos da tabela intermediária, mas não remove no primeiro momento a tupla ou o objeto... quando mando pela segunda vez remove porque já não existe relacionamentos. Pela quantidade de coisas que li, seria algum sincronismo em que o commit encerra antes, como estou usando JTA com CDI / EJB controlando as transações , ao mesmo tempo que automatiza, está mascarando algum detalhe. Allguem já pegou um problema parecido?

Na entidade Dica
@ManyToMany(fetch = FetchType.EAGER)    
    @JoinTable(name = "dica_peca", joinColumns = @JoinColumn(name = "dica_id"), inverseJoinColumns = @JoinColumn(name = "peca_id"))
    @JsonIgnoreProperties("dicas")    
    private Set<Peca> pecas = new HashSet<>();

    ----------------------------------------------------------------------------------------------
    na Entidade Peca
@ManyToMany(mappedBy = "pecas", fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
    @JsonIgnoreProperties("pecas")
    private Set<Dica> dicas = new HashSet<>();

    ----------------------------------------------------------------------------------
    No Dao
public void remove(Long id) {
        Dica candidato = em.find(Dica.class, id);
        for (Peca peca : candidato.getPecas()) {
            candidato.removePeca(peca);
        }

        em.remove(candidato);
    }

    -------------------------------------------------------------------------------------------
    na entidade Dica : 

    public void removePeca(Peca peca) {
        this.pecas.remove(peca);
        peca.getDicas().remove(this);
1 resposta

Oi Fabiano,

No seu caso quando uma entidade Dica for excluida você deseja que os registros na tabela de join também fossem excluidos?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software