У меня есть таблица, которая представляет вид узла дерева. Приведенное ниже сопоставление иллюстрирует сопоставление узла «многие ко многим».
@Entity
public class Node {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany
@JoinTable(name = "node_dependency",
joinColumns = {@JoinColumn(name = "parent_id")},
inverseJoinColumns = {@JoinColumn(name = "child_id")})
private List<Node> childNodes = new ArrayList<>();
}
Это работает, но я хотел бы иметь отдельное сопоставление таблиц для простоты запроса на удаление.
@Entity
public class NodeRelation {
@ManyToOne
private Node parent;
@ManyToOne
private Node child;
}
Если я Имея NodeRelation, я легко могу найти узлы, которые повторно используются на разных уровнях дерева и не могут быть безопасно удалены, что труднее сделать вместо того, чтобы (Один-ко-многим на Node + Много-к-одному на FK в NodeRelation) только сопоставление «многие ко многим».
Я пробовал разные комбинации сопоставления с составным ключом, представленным NodeRelation, но безуспешно (проверка по схеме БД не прошла). Пожалуйста, посоветуйте мне, какое отображение лучше в этом случае.