簡體   English   中英

Hibernate:以一對多關系查詢對象列表

[英]Hibernate: Query list of objects in one-to-many relationship

我在一個用戶和多個TvShow之間具有以下一對多關系:

@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生成,如下所示: 在此處輸入圖像描述

我知道這應該是一個簡單的查詢,但我很茫然!

您的代碼中至少有幾個問題。

首先,您沒有在另一個實體中定義關系。 也就是說,如果要對實體之間的關系建模,應該向電視節目介紹用戶信息:

@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是我們在上一步中映射的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM