JPA-annotation mit der association Tabelle
Ich bin mit JPA-Annotationen mit Hibernate und ich weiß wirklich nicht, wie zu verwalten association Tabelle.
Hier meine Datenbank :
| COUNTRY | | COUNTRY_MOVIE| | MOVIE |
|---------| |--------------| |---------|
| COU_ID |* *| COUNTRY_ID |* *| MO_ID |
| LABEL |<---->| MOVIE_ID |<---->| LABEL |
|---------| |--------------| |---------|
Den Tisch COUNTRY_MOVIE
ist ein Verein, der Tisch zwischen COUNTRY
und MOVIE
mit viele-zu-viele-Assoziation
In meinem JPA Objekt wusste ich nicht, erstellen Sie eine CountryMovie.java
Klasse, aber ich verwende @JoinTable
im Country.java
wie im folgenden code :
//Package, Import...
@Entity
@Table(name="COUNTRY")
public class Country implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="COU_ID")
private Integer couID;
@Column(name="LABEL")
private String label;
//bi-directional many-to-many association to TFilmFil
@ManyToMany
@JoinTable(
name="COUNTRY_MOVIE"
, joinColumns={
@JoinColumn(name="COU_ID")
}
, inverseJoinColumns={
@JoinColumn(name="MO_ID")
}
)
private List<Movie> movies;
public Country() {
super();
}
//Other constructor, Getter & Setter, and "toString" method...
}
Und in Movie.java
ich nur ein @ManyToMany
Anmerkung :
//Package, Import...
@Entity
@Table(name="MOVIE")
public class Movie implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="MO_ID")
private Integer moId;
@Column(name="LABEL")
private String label;
//bi-directional many-to-many association to TrPaysPay
@ManyToMany(mappedBy="movies")
private List<Country> countries;
public Film() {
super();
}
//Other constructor, Getter & Setter, and "toString" method...
}
Ich weiß nicht, ob es der beste Weg, um zu verwalten diese Art von Vereins-Tabelle, aber es sieht ok, aber wenn ich versuche, um all die Länder, einen Film, den ich erhalten eine LazyInitializationException
aus dem Ruhezustand.
So, ich versucht, um einen fetch BEGIERIG, jede m: N-Anmerkung :
Land :
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(
Im Film :
@ManyToMany(mappedBy="movies",fetch=FetchType.EAGER)
Dann habe ich dies erhalten :
org.springframework.Bohnen.factory.Unterstützung.DefaultSingletonBeanRegistry destroySingletons
Habe ich, um eine andere java-Klasse map COUNTRY_MOVIE
? oder gibt es eine Möglichkeit, um dieses problem zu beheben durch die Verwendung der gleichen java-Klasse als jetzt ?
Tako
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein mapping ist in Ordnung (Sie brauchen nicht eine Dritte Klasse). Sie auch brauchen nicht, um es begierig zu Holen. Das problem mit der Abfrage-code. Sie sollten sicherstellen, dass die Sitzung noch geöffnet, wenn Sie den Zugriff auf die Sammlung.
Aktualisieren Sie die Frage mit der Abfrage-code, und ich kann Ihnen sagen, wie um es zu beheben.
Hier ist meine Abfrage in
MyDao.java
alle zu erhalten, den Ländern und den Filmen verbunden.Ich nehme an, ich muss explizit abrufen der Liste der Filme mit join.
erste in joinTable, die join-Spalte muss der Fremdschlüssel für Land ans inversjoin Fremdschlüssel zum Film :
Können Sie alle Länder für einen Film so :