2016-04-05 40 views
-1

Bu kod parçasına sahip olduğum için film_actor (teoride) girdisi eklenir, ancak çalışmaz. Bu kod çökmez, ancak eklenen girişi veritabanına kaydetmez. ManyToMany ilişkisi yeni bir tane eklerken JPA'da kalıcı olmadı

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

    pelicula.getActors().add(nuevo); 

Ayrıca Bu kodu vardır:

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

aktör aynı zamanda bir film setine sahiptir:

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

nasıl çalışması için tüm düzeltebilirim? Ben onu araştırdım ve birçok insan benimkine benzer bir kod var, ama benimki işe yaramıyor.

+0

Film sınıfında bir Aktör toplama var mı? –

+0

Evet, özel Set aktörler; –

+0

'un üstündeki kodda ve Actor sınıfının bir Film koleksiyonu var mı? –

cevap

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

Kodumu şimdi böyle yazdım (özdeş) ama yine de çalışmıyor. Ya da çökmez. –

+0

Bu arada, Set'e eklerken, değişikliklerin kaydedilmesi için başka bir yöntem de çalıştırmalı mıyım? veya I .add() öğesini Set'e otomatik olarak kaydeder mi? –

+0

pls ek açıklamalarda Tablo isimlerini veriyorsanız, ayrıca Set'e ekledikten sonra kaydedin. – arjun9

0

Sen ilişkinin her iki tarafını atamanız gerekir:

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