Сохранить Многие для многих отношений между двумя моделями весной - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть две модели, которые имеют отношение ко многим. И я создал репозиторий, сервис и уровни контроллера для каждого из них. Теперь, когда я делаю POST-запрос к каждому из них, он создается, но как мы можем установить связь между ними, поскольку создается третья таблица, содержащая PK каждой из моделей. То же самое касается запроса GET, он возвращает пустой список.

Может ли кто-нибудь объяснить мне, как я могу POST и GET в двух моделях, которые имеют много-много связей, и сделать связь между ними.

Спасибо

1 Ответ

0 голосов
/ 11 апреля 2020

В зависимости от вашей реализации JPA вы можете установить взаимосвязь, просто комментируя поля модели. Например, здесь я использую аннотации Hibernate и java .persitence, чтобы улучшить отношения. У меня есть класс Account, у которого есть список Subject с. Аналогично, у моего Subject есть список Account с полями. Чтобы отобразить отношения, я использую аннотации java .persitence следующим образом:

Учетная запись класса. java

private List<Subject> subjects;

@ManyToMany(cascade = { CascadeType.ALL })
@JoinTable(
    name = "account_subject", 
    joinColumns = { @JoinColumn(name = "account_id") }, 
    inverseJoinColumns = { @JoinColumn(name = "subject_id") }
)
public List<Subject> getSubjects() {
    if(subjects == null) {
        return new LinkedList<Subject>();
    }
    return subjects;
}

Тема субъекта. java


private List<Account> accounts;

@ManyToMany(mappedBy = "subjects")
public List<Account>  getAccounts() {
    return accounts;
}   

Это автоматически создаст таблицу соединения с именем account_subject, содержащую два столбца account_id и subject_id, а строка cascade = { CascadeType.ALL } обеспечит выполнение любой операции (update, delete et c ..) над обе сущности.

Чтобы сохранить сущность учетной записи с помощью Hibernate, вам просто нужно установить обязательное поле, например:

List<Subject> mySubjects = new List<Subject>();
mySubjects.add(mySubject);
myAccount.setSubjects(mySubjects);

и в вашем классе репозитория мы используем метод Hibernate saveOrUpdate() сохраняться

sessionFactory.getCurrentSession().saveOrUpdate(myAccount);

, где sessionFactory - это ваш объект Hibernate SessionFactory.

...