JPA ManyToMany Отношения Hibernate - PullRequest
0 голосов
/ 06 июня 2018

У меня есть Entity Movie, а затем Person Entity.Кино имеет много-много отношений с Личностью: один - по разыгрыванию, другой - по производству, а другой - по режиссуре.

Поэтому у меня возникает вопрос о том, как я могу получить фильмы, которые он снял, снял и снял.

// Класс персонажа:

@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 boolean isActor;
private boolean isDirector;
private boolean isProducer;

@ManyToMany(mappedBy = "casting")
private Set<Movie> moviesCasting = new HashSet<>();

@ManyToMany(mappedBy = "movieDirection")
private Set<Movie> movieDirection = new HashSet<>();

@ManyToMany(mappedBy = "movieProduction")
private Set<Movie> movieProduction = new HashSet<>();

// Класс фильма

 @Entity
 public class Movie implements Serializable {

private static final long serialVersionUID = 1L;    
@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name = "casting_movie",
        joinColumns = @JoinColumn(name = "id"),
        inverseJoinColumns = @JoinColumn(name = "idPerson")
)
private Set<Person> casting = new HashSet<>();

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

@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name = "production_movie",
        joinColumns = @JoinColumn(name = "id"),
        inverseJoinColumns = @JoinColumn(name = "idPerson")
)
private Set<Person> movieProduction = new HashSet<>();

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

@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name = "direction_movie",
        joinColumns = @JoinColumn(name = "id"),
        inverseJoinColumns = @JoinColumn(name = "idPerson")
)

private Set<Person> movieDirection = new HashSet<>();
getters and setters(...)

Когда я хочу получить информацию о персоне, я получаю ошибку: не удалось ленивоинициализировать коллекцию ролей Movies.casting ”

Если я дал человеку, я хочу получить каждую« фильмографию », я должен создать двунаправленный текст ManyToMany Relationship?

1 Ответ

0 голосов
/ 07 июня 2018

У вас может быть другая сущность, которая будет иметь многозначные ссылки на фильм и человека с одним дополнительным полем RelationshipType (со значениями Casting, Production, Direction и т. Д.).Вы должны создать перечисление для этого.

Таким образом, вы можете получить фильмы, ориентированные на человека, например (из новой сущности): findByMovieAndPersonAndRelationshipType(Movie movie, Person person, RelationshipType.DIRECTED);

PS избавиться от всего, что вам нужно-множество отношений

...