2016-04-05 9 views
-1

film_actor(理論上)にエントリを追加するこのコードはありますが、動作しません。このコードはクラッシュしませんが、追加されたエントリはデータベースに保存されません。新しいものを追加するときにManyToMany関係がJPAで永続しない

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

    pelicula.getActors().add(nuevo); 

はまた、私はこのコードを持っている:

@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; 
    } 

俳優も映画のセットがあります。

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

私はそれを動作させるために、すべてこの問題を解決するにはどうすればよいですか?私はそれをgoogledし、多くの人が私のものと同様のコードを持っていますが、ただ私のものは動作しません。

+0

は映画クラスの俳優のコレクションがありますか? –

+0

はい、プライベートセットの俳優です。上のコードにあります –

+0

ActorクラスにはFilmコレクションがありますか? –

答えて

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

私は今このような(同じ)私のコードを書いたが、まだ動作しません。しかし、どちらもクラッシュしません。 –

+0

ちなみに、セットに追加するときに、別のメソッドを実行して変更を保存する必要がありますか?またはそれを自動的に保存しますか? –

+0

plsアノテーションにTableの正確な名前を付けるかどうかをチェックし、Setに追加した後に保存します。 – arjun9

0

あなたは関係の両側を割り当てる必要があります:

pelicula.getActors().add(nuevo); 
nuevo.getFilms().add(película); 
関連する問題