多对多更新正在删除所有关联

时间:2018-09-21 23:56:42

标签: hibernate jpa

我在许多表之间有多对多关系,可以在这里看到它们的简化视图:

Tables relationship

在我的代码中,我定义了它们之间的关系。它们都具有等号,并且哈希码被覆盖。这是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;

Class 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链接到每个实体的关系。 The same anexo relating to two entities

但是,当我运行运行anexoSB.edit(anexo)的代码时,编辑不起作用:不是删除关系anexo-movimento,而是删除了关系anexo-movimento和anexo-distribuicao 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);
            }
        }
    }

}

我应该怎么做才能使其正常工作?

0 个答案:

没有答案