2016-04-05 10 views
-1

Ich habe dieses Stück Code, der einen Eintrag zu film_actor (in der Theorie) hinzugefügt, aber es funktioniert nicht. Dieser Code stürzt nicht ab, speichert den hinzugefügten Eintrag jedoch nicht in der Datenbank.ManyToMany Beziehung in JPA nicht beibehalten, wenn ein neues

Actor nuevo = ActorFacadeEJB.find(actor_id); 
    Film pelicula = FilmFacadeEJB.find(film_id); 

    pelicula.getActors().add(nuevo); 

Auch ich habe diesen Code:

@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) 
    @JoinTable(name = "film_actor", joinColumns = { @JoinColumn(name = "film_id") }, inverseJoinColumns = { 
      @JoinColumn(name = "actor_id") }) 
    private Set<Actor> actors; 


    public Set<Actor> getActors() { 
     return actors; 
    } 

Der Schauspieler hat auch einen Film-Set:

@ManyToMany(mappedBy="actors") 
private Set<Film> film= new HashSet<Film>(); 

Wie kann ich all dies zu beheben, damit es funktioniert? Ich habe es gegoogelt, und viele Leute haben einen ähnlichen Code wie ich, aber nur meiner funktioniert nicht.

+0

Gibt es Schauspieler Sammlung in der Filmklasse? –

+0

Ja, es ist das private Set Schauspieler; Es ist in dem Code über –

+0

Und die Schauspieler-Klasse hat eine Film-Sammlung? –

Antwort

0
Make sure your Annotations are proper as below : 
@Entity 
@Table(name="film") 
class Film{ 
@ManyToMany(cascade = {CascadeType.ALL}) 
@JoinTable(name="film_actor", 
       joinColumns={@JoinColumn(name="film_id")}, 
       inverseJoinColumns={@JoinColumn(name="actor_id")}) 
private Set<Actor> actors=new HashSet<Actor>; 
} 

@Entity 
@Table(name="actor") 
class Actor{ 
@ManyToMany(mappedBy="actors") 
    private Set<Film> film= new HashSet<Film>(); 
} 
+0

Ich habe meinen Code jetzt so geschrieben (identisch) aber funktioniert immer noch nicht. Es stürzt jedoch auch nicht ab. –

+0

Übrigens, sollte ich beim Hinzufügen zum Set auch eine andere Methode ausführen, damit die Änderungen gespeichert werden? oder speichert es automatisch wenn ich .add() zum Set? –

+0

Bitte überprüfen Sie, ob Sie genaue Namen der Tabelle in Annotationen angeben, und speichern Sie sie auch, nachdem Sie dem Set hinzugefügt haben. – arjun9

0

Sie müssen beide Seiten der Beziehung zuzuordnen:

pelicula.getActors().add(nuevo); 
nuevo.getFilms().add(película); 
Verwandte Themen