Отношение @ManyToMany для однотипных сущностей

Имеется область взаимосвязь между однотипными сущностями:

@JoinTable(name = "QMS_TARGET_TARGET_LINK",
        joinColumns = @JoinColumn(name = "TARGET_1_ID", referencedColumnName = "ID", nullable = false),
        inverseJoinColumns = @JoinColumn(name = "TARGET_2_ID", referencedColumnName = "ID", nullable = false))
@ManyToMany
private Set<Target> relatedTargets;

При добавлении Target в relatedTargets, связь работает только для первой стороны, подскажите как правильно настроить связь в данной ситуации.


Ответы (2 шт):

Автор решения: Alexzander Zharkov

В классе Target используйте конструкцию:

@ManyToMany(mappedBy = "relatedTargets")
private List<ДРУГОЙ КЛАСС> smth;
→ Ссылка
Автор решения: Roman Konoval

Правильное решение это не полагаться на ORM или БД, а сделать это на уровне классов, т.е. чтоб это работало везде. Это часть бизнес логики, и со всех сторон лучше, если это будет прямо выражено в коде. В частности, код будет автоматически поддерживать инварианты и, скажем, в unit-тестах:

class Target {
  private Set<Target> relatedTargets;

  public void associateWith(Target association) {
    relatedTargets.add(association);
    association.getRelatedTargets().add(this);
  }
}

И дальше ползуйтесь этим методом для установки связи.

→ Ссылка