0
我是HQL初學者(並且在所有休眠狀態下)。我需要一個簡單的多對多關係幫助:HQL查詢返回沒有結果
視頻 - video_category - 類別
Category.java
@Entity
public class Category {
@Id
@GeneratedValue
private int id;
@Size(min = 3, max = 20, message = "3-20 chars!")
private String name;
@ManyToMany(mappedBy = "categories")
private List<Video> videos;
//Getters and setters
Video.java
@Entity
public class Video {
@Id
@GeneratedValue
private int id;
private String url;
private Date publishDate;
@ManyToOne(cascade = CascadeType.REMOVE)
@JoinColumn(name = "user_id")
private User user;
@NotEmpty
@ManyToMany(cascade = CascadeType.REMOVE)
@JoinTable(name = "video_category", joinColumns = @JoinColumn(name = "video_id"), inverseJoinColumns = @JoinColumn(name = "category_id"))
private List<Category> categories;
個而這個查詢沒有給我結果
Query query = sessionFactory
.getCurrentSession()
.createQuery(
"from Video vid inner join vid.categories cat where vid.id = :category");
query.setParameter("category", category);
如果我只發送.createQuery("from Video")
- 它給了我所有視頻(所以DB連接是罰款)。 Category
a video_category
表也有一些數據。我想,連接表或其他地方會出現錯誤。
編輯:
我試圖實現走表video_category
,看看那裏category_id
。在SQL中,像這樣:select * from Video join video_category on Video.id=video_category.video_id where category_id = 2
'ug'(爲什麼這到底是不是'video'它這樣命名)是視頻的別名。並且您正在嘗試查找ID等於參數'category「的視頻。要麼你爲這個參數選擇了一個非常奇怪的名字,該名稱應該被命名爲'videoId',或者它實際上是一個類別的ID,並且試圖找到具有該類別ID的視頻是非常奇怪的。你想達到什麼目的?什麼是'類別'?你爲什麼不使用session.get(Video.class,id)? –
對不起,我會編輯它。這是一個ManyToMany關係,我試圖加入table'video_category'並在那裏尋找'category_id'。在SQL中,它是這樣的:'select * from Video join video_category on Video.id = video_category.video_id where category_id = 2'。 – Pivoman
然後你需要'where u.id =:category'。 'ug'是視頻的別名。 'u'是類別的別名。一切都會更清晰,命名方式很好:'從視頻視頻內連接video.categories類別中選擇視頻,其中category.id =:catagoryId'。 –