У меня есть много-много взаимосвязей между многими таблицами, здесь можно увидеть упрощенное представление:
Отношение таблиц
В моем коде я определяюотношения между ними.Все они имеют равные и перезаписаны хэш-код.Это класс 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);
}
}
}
}
Что я должен сделать, чтобы это работало?