Сущность JPA ManyToMany не сохраняется - PullRequest
0 голосов
/ 05 мая 2020

У меня есть два следующих объекта:

@Entity
@Table(name = "mailinglist")
public class MailingList {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column
private String name;

@ManyToMany(fetch = FetchType.EAGER,cascade = {
    CascadeType.PERSIST,
    CascadeType.MERGE
})
@JoinTable(
    name = "has_account",
    joinColumns = @JoinColumn(name = "mailinglist_name"),
    inverseJoinColumns = @JoinColumn(name = "account_id"))
private List<EmailAccount> accounts;

и

@Entity
@Table(name = "emailaccount")
public class EmailAccount {

@Id
@Column
private String email;

@ManyToMany(mappedBy = "accounts")
@Column
private List<MailingList> mailingLists;

Каждый раз, когда я пытаюсь добавить новые электронные письма через запрос, они не сохраняются, хотя они правильно анализируются и хранится. Что может быть причиной?

Скажите, пожалуйста, какой информации вам не хватает, если вопрос недостаточно ясен.

1 Ответ

3 голосов
/ 05 мая 2020

См. Советы по гибернации: как сопоставить двунаправленную ассоциацию многие-ко-многим

Двунаправленные ассоциации легко использовать в запросах, но они также требуют дополнительного шага, когда вы сохраняете новую сущность. При добавлении или удалении объекта вам необходимо обновить связи с обеих сторон.

Обновление связей на обоих объектах - это задача, подверженная ошибкам. Поэтому рекомендуется предоставлять для него вспомогательные методы.

@Entity
@Table(name = "mailinglist")
public class MailingList {

    // ...

    public void addEmailAccount(EmailAccount acc) {
        this.accounts.add(acc);
        acc.getMailingLists().add(this);
    }

    public void removeBook(EmailAccount acc) {
        this.accounts.remove(acc);
        acc.getMailingLists().remove(this);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...