我在 Hibernate 中使用 JPA 注释,但我真的不知道如何管理关联表。
这是我的数据库模式作为实体关系 (ER) 图:
COUNTRY COUNTRY_MOVIE
|---------|* *|---------------| | MOVIE |
| COU_ID |<---->| COUNTRY_ID |* *|---------|
| LABEL | | MOVIE_ID |<---->| MO_ID |
|---------| |---------------| | LABEL |
|---------|
COUNTRY_MOVIE
表是 COUNTRY
和 MOVIE
之间的关联表,具有多对多关联(由上面的箭头线表示,其中多对多由 * *
) 表示。
在我的 JPA 对象中,我没有创建 CountryMovie.java
类。
但我在 Country.java
中使用了 @JoinTable
,如下代码所示:
//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...
}
LazyInitializationException
我不知道这是否是管理这种关联表的最佳方式,即使它看起来还不错。
但是当我尝试获取一部电影的所有国家/地区时,我从 Hibernate 获得了一个 LazyInitializationException
。
FetchType.EAGER
所以我尝试为每个多对多注解添加一个 fetch EAGER:
在国家
:
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(
在电影
中:
@ManyToMany(mappedBy="movies",fetch=FetchType.EAGER)
然后我得到这个:
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
COUNTRY_MOVIE
?最佳答案
您的映射没问题(您不需要第三类)。您也不需要使其急切获取。问题出在查询代码上。您应该确保在访问集合时 session 仍处于打开状态。
用您的查询代码更新问题,我可以告诉您如何解决。
https://stackoverflow.com/questions/13095850/
相关文章:
php - DOMDocument::save[domdocument.save]:无法打开流:权限
winapi - 使用 NtOpenKey 时重定向注册表访问的正确方法是什么?
c# - PDFSharp 使用 PdfTextField 作为位置和大小引用在 pdf 中插入图像
nginx - 在 nginx 托管上出现 502 错误网关错误
authentication - 如何使用 JavaMail 调试 SMTP 身份验证错误?
python - 是否可以在 Pandas 中将 searchsorted 与 MultiIndex