私はHQLで初心者です(そして、休止状態です)。 - video_category - カテゴリHQLクエリは結果を返しません。
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;
ビデオ:私はシンプル多対多関係で助けが必要それは私にすべてのビデオを提供します(そうDBへの接続で結構です) -そして、このクエリは、私はちょうど.createQuery("from Video")
を送信する場合、私には結果
Query query = sessionFactory
.getCurrentSession()
.createQuery(
"from Video vid inner join vid.categories cat where vid.id = :category");
query.setParameter("category", category);
を与えません。 Category
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を持つビデオを見つけることは非常に奇妙です。あなたは何を達成しようとしていますか? 'category'とは何ですか?なぜあなたは単にsession.get(Video.class、id)を使用しないのですか? –
申し訳ありません、私はそれを編集します。それはManyToMany関係であり、私は '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'はcategoryのエイリアスです。良い名前を付けると、すべてがはっきりと分かります: 'ビデオビデオからビデオを選択するinner join video.categories category where category.id =:catagoryId'。 –