gpt4 book ai didi

java - Hibernate:查询一对多关系的对象列表

转载 作者:行者123 更新时间:2023-11-29 17:31:21 26 4
gpt4 key购买 nike

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

@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;
}

我想要一个方法,在给定 userId 时返回一个包含最喜欢的电视节目的列表。

到目前为止我已经:

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

但这只是返回与我作为参数传递的 userId 具有相同 Id 的 TvShow。

数据库完全由 Hibernate 生成,如下所示: enter image description here

我知道这应该是一个简单的查询,但我不知所措!

最佳答案

您的代码中至少存在一些问题。

首先,您没有在另一个实体中定义关系。也就是说,如果您要对实体之间的关系进行建模,您应该向电视节目介绍用户:

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

接下来是关于mappedBy的使用。您应该定义该集合映射到的 java 属性的名称,如下所示:

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

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

关于java - Hibernate:查询一对多关系的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50611084/

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