Несколько ManyToMany с использованием JPA Hibernate - PullRequest
0 голосов
/ 12 мая 2018

Я хочу создать связь ManyToMany между фильмом и человеком.Особенно мне нужны три отношения.

Проблема в том, что он создает ОДНУ таблицу с этими столбцами:

movieProduction_id | movieProduction_idPerson | movieDirection_id | movieDirection_idPerson | moviesCasting_id | casting_idPerson

Мне нужно создать три разные таблицы, одну для movieProduction, одну для movieDirection идругой для movieCasting.

Также я получаю ошибку "" не удалось лениво инициализировать коллекцию ролей: org.udg.pds.simpleapp_javaee.model.Movie.casting, не удалось инициализировать прокси - нет сеанса ", когда яхочу получить фильм по ID. Я также пытался использовать fetchType = EAGER, но intellij не компилируется.

Фильм:

@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE},fetch = FetchType.EAGER)
private List<Genre> genres = new ArrayList<>();

public List<Genre> getGenres() {
    genres.size();
    return genres;
}


@ManyToMany(cascade = {CascadeType.ALL})
private List<Person> casting = new ArrayList<>();

public List<Person> getCasting() {
    casting.size();
    return casting;
}

@ManyToMany(cascade = {CascadeType.ALL})
private List<Person> movieProduction = new ArrayList<>();

public List<Person> getMovieProduction() {
    movieProduction.size();
    return movieProduction;
}

@ManyToMany(cascade = {CascadeType.ALL})
private List<Person> movieDirection = new ArrayList<>();

public List<Person> getmovieDirection() {
    movieDirection.size();
    return movieDirection;
}

Персона:

@Entity
public class Person implements Serializable{

private static final long serialVersionUID = 1L;
@Id
@JsonView(Views.Private.class)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idPerson;
private String name;
private String surnames;
private String nacionality;
private String date_birth;
private boolean isActor;
private boolean isDirector;
private boolean isProducer;

@ManyToMany(mappedBy = "casting")
private List<Movie> moviesCasting = new ArrayList<>();

@ManyToMany(mappedBy = "movieDirection")
private List<Movie> movieDirection = new ArrayList<>();

@ManyToMany(mappedBy = "movieProduction")
private List<Movie> movieProduction = new ArrayList<>();

1 Ответ

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

Для создания таблицы для каждого отношения вы должны использовать

@ManyToMany @JoinTable(name = "foo") public List<Person> getCasting(){ return casting;

С кодом выше у вас будет 3 соединительных таблицы.

Также с вашей ленивой проблемой у вас есть 2выбор зависит от вас, дао вещь.Вы можете установить fetch = FetchType.EAGER) для всех 3 соединений.Или пытаться получить данные отношения до закрытия транзакции.(Он должен увидеть вашу конфигурацию транзакции и дао)

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