Обновление «Многие ко многим» удаляет все ассоциации - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть много-много взаимосвязей между многими таблицами, здесь можно увидеть упрощенное представление:

Отношение таблиц

В моем коде я определяюотношения между ними.Все они имеют равные и перезаписаны хэш-код.Это класс Anexo.

@Entity
@Table(name = "tb_anexo")
@NamedQuery(name = "TbAnexo.findAll", query = "SELECT t FROM Anexo t")
public class Anexo extends Selecionavel implements Serializable {

@ManyToMany
@JoinTable(
        name="tb_anexo_entidades",
        joinColumns=@JoinColumn(name="fk_anexo", referencedColumnName="id"),
        inverseJoinColumns=@JoinColumn(name="fk_movimento", referencedColumnName="id"))
private List<Movimento> movimentos;

@ManyToMany
@JoinTable(
        name="tb_anexo_entidades",
        joinColumns=@JoinColumn(name="fk_anexo", referencedColumnName="id"),
        inverseJoinColumns=@JoinColumn(name="fk_distribuicao_eletronica", referencedColumnName="id"))
private List<DistribuicaoEletronica> distribuicoesEletronicas;

Класс DistribuicaoEletronica:

@Entity
@Table(name="tb_distribuicao_eletronica")
@NamedQuery(name="DistribuicaoEletronica.findAll", query="SELECT d FROM DistribuicaoEletronica d")
public class DistribuicaoEletronica implements Serializable {

@ManyToMany(mappedBy="distribuicoesEletronicas")
private List<Anexo> tbAnexos;

И Класс Movimento:

@Entity
@Table(name = "tb_movimento")
@NamedQuery(name = "TbMovimento.findAll", query = "SELECT t FROM Movimento t")
public class Movimento implements Serializable {

@ManyToMany(mappedBy="movimentos")
private List<Anexo> tbAnexos;

Мне удалось создать отношение, связывающее anexo с каждым из объектов, То же anexo, относящееся к двум сущностям

Однако, когда я запускаю этот код, который запускает anexoSB.edit (anexo), редактирование не работает: вместо удаления отношения anexo - movimento,удаляются как отношения anexo - movimento, так и anexo - distributionicao eletronica.

private void removeAnexosWhenSaving() {
    for(Anexo a: removedAnexos){
        if(a.getId() != null && !anexos.contains(a)){
            a.getMovimentos().remove(movimento);
            a.movimento.getTbAnexos().remove(this);
        }
    }
    for(Anexo anexo: removedAnexos){
        if(anexo.getId() != null && !anexos.contains(anexo)){
            if(!anexo.verifyDependences()){
                anexoSB.remove(anexo);
            }
            else {
                anexoSB.edit(anexo);
            }
        }
    }

}

Что я должен сделать, чтобы это работало?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...