2016-05-15 7 views
0

Ich habe zwei Entitäten: Film und Kino und sie haben eine @ManyToMany-Assoziation. Das Kino ist die besitzende Seite, in beiden Seiten, halte ich eine Sammlung zu speichern fks, und beide Seite ist faul hergeholt:Hibernate Lazy Fetch, wie @ManytoMany Assoziationen hinzufügen?

@Table(name="Cinema") 
@Entity 
public class Cinema { 
@ManyToMany(cascade = CascadeType.ALL, 
      fetch=FetchType.LAZY) 
@JoinTable(name = "cinema_movie", 
      joinColumns = {@JoinColumn(name = "cinema_id", nullable = false, updatable = false)}, 
      inverseJoinColumns = {@JoinColumn(name = "movie_id", nullable = false, updatable = false)}) 
private @Getter @Setter Set<Movie> movies = new HashSet<Movie>(); 
... 
} 

@Entity 
@Table(name="Movie") 
public class Movie { 
@ManyToMany(cascade = CascadeType.ALL, 
      mappedBy = "movies") 
private @Getter @Setter Set<Cinema> cinemas = new HashSet<Cinema>(); 
... 
} 

Weil ich bin mit lazy-holen, wenn ich teste Sie den folgenden Code, ich eine "LazyInitializationException" erhalten:

//mp and cp means MovieRepo and CinemaRepo 
Cinema c2 = new Cinema(); 
     c2.setCity(1); 
     c2.setAddress("chigang"); 
     c2.setName("feiyang"); 
    cp.save(c2); 
    m = mp.findByName("Zootopia"); 
    //m = mp.fetchCinemas(m.getId()); 
    m.addCinema(c2); 
    c2.addMovie(m); 
    cp.save(c); 

Wenn ich //m = mp.fetchCinemas(m.getId()); die Ausnahme ist weg Kommentar-. Wie Sie vorhersagen können, ich die folgende SQL-Abfrage in dieser Methode ausführen:

@Query(
     "SELECT c FROM Cinema c INNER JOIN FETCH c.movies "+ 
     "WHERE c.id = :cid" 
    ) 
Cinema fetchMovies(@Param("cid") Long cid); 

Aber wenn ich will nur einen Film mit einem Kino assoziieren, ist es umständlich, explizit Alle Kinos zu holen, und dann einen ihn hinzufügen und dann rette sie alle.

Wie kann ich ein Cinema zu m Sammlung hinzufügen, ohne alle Kinos mit m verbunden?

Oder vielleicht habe ich Problem Verständnis faul abgerufene Sammlungen im Winterschlaf. Ich bin neu im Winterschlaf und Frühling. Jede Hilfe wird geschätzt. (Wenn Sie meine Frage an dieser Zeile zu lesen, danke, was < 3)

Antwort

Verwandte Themen