Hibernate で JPA アノテーションを使用していますが、関連付けテーブルの管理方法がよくわかりません。
エンティティ関係
エンティティ関係 (ER) ダイアグラムとしての私のデータベース スキーマは次のとおりです。
COUNTRY COUNTRY_MOVIE
|---------|* *|---------------| | MOVIE |
| COU_ID |<---->| COUNTRY_ID |* *|---------|
| LABEL | | MOVIE_ID |<---->| MO_ID |
|---------| |---------------| | LABEL |
|---------|
このテーブルCOUNTRY_MOVIE
は、多対多の関連付け ( で表される多対多を上の矢印線で表したもの)の間の関連付けテーブルです。COUNTRY
MOVIE
* *
JPA を使用してコードでモデル化されたエンティティー
私の JPA オブジェクトでは、CountryMovie.java
クラスを作成しませんでした。
国
しかし、私は次のコードのように使用@JoinTable
します:Country.java
//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...
}
映画
そして、私は注釈Movie.java
のみを使用します:@ManyToMany
//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...
}
問題 1:LazyInitializationException
この種の関連テーブルを管理するのに最適な方法であるかどうかはわかりません。
しかし、映画のすべての国を取得しようとすると、LazyInitializationException
Hibernate から取得します。
問題2:試した後FetchType.EAGER
そこで、各多対多アノテーションに fetch EAGER を追加しようとしました。
でCountry
:
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(
でMovie
:
@ManyToMany(mappedBy="movies",fetch=FetchType.EAGER)
次に、これを取得します:
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
質問
- マップする別の Java クラスを作成する必要があります
COUNTRY_MOVIE
か? - または、現在と同じ Java クラスを使用してこの問題を解決する方法はありますか?