многие ко многим вместо одного ко многим - PullRequest
0 голосов
/ 02 мая 2018

Меня немного смущает, почему JPA создает два отношения «многие ко многим» вместо 2 отношений «один ко многим». У меня есть автор класса и две коллекции Set телефонов и электронных писем.

@Entity
public class Author {

    @Id
    @GeneratedValue
    private int id;

    private String firstName;

    private String lastName;

    @OneToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
    private Set<Phone> phones;

    @OneToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
    private Set<Email> emails;

и два класса

@Entity
public class Phone {

    @Id
    @GeneratedValue
    private int id;

    private String number;

    @ManyToOne
    @JoinColumn(name = "author_fk_phone_id")
    private Author author;

@Entity
public class Email {

    @Id
    @GeneratedValue
    private int id;

    private String email;

    @ManyToOne
    @JoinColumn(name = "author_fk_id")
    private Author author;

Таким образом, JPA должен создавать таблицы Author, Phone, Email, но JPA дополнительно создает таблицы author_email, author_phone. Я в замешательстве.

1 Ответ

0 голосов
/ 02 мая 2018

Ваш провайдер JPA создает дополнительные таблицы (author_email и author_phone), поскольку у вас есть двунаправленные отношения, но вы не указали, какие стороны этих отношений являются владельцами (атрибут mappedBy).

Внесите следующие изменения в отношении коллекций в классе Author, и все должно работать так, как вы ожидали.

@OneToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER, mappedBy = "author")
private Set<Phone> phones;

@OneToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER, mappedBy = "author")
private Set<Email> emails; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...