Отношение @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);
}
}
И дальше ползуйтесь этим методом для установки связи.