2017-01-24 4 views
1

Hier ist, wie ich meine Datenbank zu erstellen:JPA viele zu viele

CREATE TABLE actor(id INT PRIMARY KEY, name VARCHAR(255)); 
CREATE TABLE movie(id INT PRIMARY KEY, title VARCHAR(255), release_date VARCHAR(255), duration INT, type VARCHAR(255), director VARCHAR(255), category VARCHAR(255)); 
CREATE TABLE movie_actor(movie_id INT NOT NULL, actor_id INT NOT NULL); 

Und hier ist mein Java-Code:

@Entity 
public class Actor { 
    @Id 
    private Integer id; 
    private String name; 
    @ManyToMany(mappedBy="actorList") 
    private List<Movie> movieList = new ArrayList<Movie>(); 
//getters and setters 
} 

und zweiter Klasse.

@Entity 
public class Movie { 
    @Id 
    private int id; 
    private String title; 
    private String releaseDate; 
    private int duration; 
    private String type; 
    private String director; 
    @ManyToMany() 
    @JoinTable(name = "movie_actor", joinColumns = @JoinColumn(name = "movie_id"), inverseJoinColumns = @JoinColumn(name = "actor_id")) 
    private List<Actor> actorList = new ArrayList<Actor>(); 
    @Enumerated(EnumType.STRING) 
    private MovieCategory category; 
//getters and setters 
} 

Repositorys:

@Repository 
public interface MovieRepository extends JpaRepository<Movie, Integer> { 
} 
@Repository 
public interface ActorRepository extends JpaRepository<Actor, Integer> { 
} 

Jemand hat vielleicht eine Ahnung, was ich hier falsch mache? Weil es nicht funktioniert. Ich kann keine Filme mit .findAll() bekommen.

@edit

Kann ich nur OneToMany in Movies verwenden und alle adnotations in Actor ignorieren? Auf diese Weise funktioniert es, aber ich habe keine Ahnung, ob es korrekt ist. Ich möchte nur Filme mit Schauspielerliste anzeigen, ich brauche es nicht auf andere Weise. Aber in einem Film kann man viele Schauspieler spielen, und jeder Schauspieler kann in vielen Filmen spielen, also dachte ich, es sollte ManyToMany sein.

+0

wo ist dein Debugging? wie die SQL, die vom JPA-Provider aufgerufen wird, um zu sehen, was mit den Abfragen oder der Schemazuordnung nicht stimmt? –

Antwort

0

Ok nach bearbeiten aktualisiert, wenn Sie von einer Seite gehen wollen, dann ist das eine unidirektionale Sammlung Mapping.

Sie können eine Zuordnung von Schauspielern entfernen und Film so sein sollte:

@OneToMany 
    @JoinTable(name = "movie_actor", joinColumns = @JoinColumn(name = "movie_id"), inverseJoinColumns = @JoinColumn(name = "actor_id")) 
    private List<Actor> actorList = new ArrayList<Actor>(); 

In dieser Art von Set-up der @OneToMany sollte ohne den ‚mappedBy‘ Attribut.

+0

Es wird jetzt Spam des ersten Films aus der Liste angezeigt, wenn ich alle Filme anzeigen möchte:/ –

+0

Zeigen Sie mir Ihre Abfrage –

+0

Wenn Sie nur die .findAll() des JpaRepository verwenden möchten, müssen Sie möglicherweise @ManyToMany (fetch = FetchType.EAGER) zu Ihrem Mapping –