hibernate:一对多关系中对象的查询列表

mlmc2os5  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(345)

我在一个用户和多个电视节目之间有以下一对多关系:

@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id", updatable = false, nullable = false)
private int userId;

@OneToMany(mappedBy = "tvShowId", fetch = FetchType.EAGER)
private List<TvShow> favourites;
}

其中tvshow.java是:

@Entity
@Table(name = "tvshows")
public class TvShow {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private int tvShowId;

@OneToMany(mappedBy = "seasonId", fetch = FetchType.EAGER)
private List<Season> seasons;
}

我想要一个方法,将返回一个列表,其中包含最喜爱的电视节目时,给了一个用户名。
到目前为止,我已经:

@Query("SELECT t FROM TvShow t WHERE t.id = :userId")
public List<TvShow> getFavourites(@Param("userId") int userId);

但这只是返回tvshow,它与作为参数传递的userid具有相同的id。
数据库完全由hibernate生成,如下所示:在此处输入图像描述
我知道这应该是一个简单的查询,但我不知所措!

ds97pgxw

ds97pgxw1#

你的代码中至少有几个问题。
首先,您没有定义其他实体中的关系。也就是说,如果要对实体之间的关系进行建模,您应该告诉电视节目有关用户的信息:

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="user_id", nullable=false)
private User user;

下一个是关于 mappedBy . 您应该定义集合Map到的java属性的名称,如下所示:

@OneToMany(mappedBy = "user", fetch = FetchType.EAGER)
private List<TvShow> favourites;
}

在这里 user 是我们在上一步中Map的属性。

相关问题