gpt4 book ai didi

hibernate - 带有关联表的 JPA 注解

转载 作者:行者123 更新时间:2023-12-05 05:28:13 24 4
gpt4 key购买 nike

我在 Hibernate 中使用 JPA 注释,但我真的不知道如何管理关联表

实体关系

这是我的数据库模式作为实体关系 (ER) 图:

  COUNTRY          COUNTRY_MOVIE        
|---------|* *|---------------| | MOVIE |
| COU_ID |<---->| COUNTRY_ID |* *|---------|
| LABEL | | MOVIE_ID |<---->| MO_ID |
|---------| |---------------| | LABEL |
|---------|

COUNTRY_MOVIE 表是 COUNTRYMOVIE 之间的关联表,具有多对多关联(由上面的箭头线表示,其中多对多由 * *) 表示。

使用 JPA 在代码中建模的实体

在我的 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...
}

问题 1:LazyInitializationException

我不知道这是否是管理这种关联表的最佳方式,即使它看起来还不错。

但是当我尝试获取一部电影的所有国家/地区时,我从 Hibernate 获得了一个 LazyInitializationException

问题 2:在我尝试 FetchType.EAGER

之后

所以我尝试为每个多对多注解添加一个 fetch EAGER:

国家:

@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(

电影中:

@ManyToMany(mappedBy="movies",fetch=FetchType.EAGER)

然后我得到这个:

org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons

问题

  1. 我是否必须创建另一个 java 类来映射 COUNTRY_MOVIE
  2. 或者有没有办法通过使用与现在相同的 java 类来解决这个问题?

最佳答案

您的映射没问题(您不需要第三类)。您也不需要使其急切获取。问题出在查询代码上。您应该确保在访问集合时 session 仍处于打开状态。

用您的查询代码更新问题,我可以告诉您如何解决。

关于hibernate - 带有关联表的 JPA 注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13095850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com