Hibernate много-ко-многим, сопоставление одной и той же сущности однонаправленной - PullRequest
0 голосов
/ 13 марта 2020

У меня есть таблица, которая представляет вид узла дерева. Приведенное ниже сопоставление иллюстрирует сопоставление узла «многие ко многим».

@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, но безуспешно (проверка по схеме БД не прошла). Пожалуйста, посоветуйте мне, какое отображение лучше в этом случае.

1 Ответ

1 голос
/ 13 марта 2020

Лучше не использовать childNodes связь в Node.

Будет удобно добавить id к NodeRelation.

@Entity
public class Node {

    @Id
    @GeneratedValue
    private Long id;

}

@Entity
public class NodeRelation {

    @Id
    @GeneratedValue
    private Long id;

    @ManyToOne
    private Node parent;

    @ManyToOne
    private Node child;

}

. Также Вы можете добавить уникальное ограничение (parent, child) к NodeRelation (чтобы иметь такое же поведение, как @ManyToMany для таблицы соединений).

Это потребуется для выполнения запросов только к таблице NodeRelation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...