Hibernate:查询一对多关系的对象列表
Hibernate: Query list of objects in one-to-many relationship
我在用户和多个电视节目之间有以下一对多关系:
@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;
}
我想要一种方法,在给定用户 ID 时,该方法会 return 一个包含最喜欢的电视节目的列表。
到目前为止我有:
@Query("SELECT t FROM TvShow t WHERE t.id = :userId")
public List<TvShow> getFavourites(@Param("userId") int userId);
但这只是 return 与我作为参数传递的 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
就是我们上一步映射的属性
我在用户和多个电视节目之间有以下一对多关系:
@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;
}
我想要一种方法,在给定用户 ID 时,该方法会 return 一个包含最喜欢的电视节目的列表。
到目前为止我有:
@Query("SELECT t FROM TvShow t WHERE t.id = :userId")
public List<TvShow> getFavourites(@Param("userId") int userId);
但这只是 return 与我作为参数传递的 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
就是我们上一步映射的属性