2012-12-04 53 views
-1

我有3個表如下多對多關係查詢休眠(本地)

Post 
    pid pname 

TagPost 
    tagid postId postTime 

Tag 
    tagid tagNam 

一個崗位可以有多個標籤和一個標籤可以有多個職位。基本上是一個n * n映射。

現在我怎麼可以模擬以下內容HQL查詢使用session.createQuery()

  1. 選擇具有通過郵寄我可以做post.getTagSet()的創建時間給定的標記順序的所有挑戰,但我想n只有最新的帖子。
  2. 選擇所有包含java作爲其標籤之一的帖子?按postTime排序。
  3. 就是要在性能方面這種情況建模這個正確的方式?或者我應該有以下結構?

    pname的帖子ID標籤發表時間在

    這種情況下

價值標籤欄可以是逗號分隔。標籤欄=爪哇 樣品值,休眠

回答

0

你的拳頭設計三個用表是最好的一個考慮所有情況。您可以高效地運行查詢。這些類型的查詢在HQL中很常見。

  1. 以得到n個最新的帖子,你可以有這樣的查詢:

    Query query = session.createQuery("select tagPost.tag from TagPost as tagPost where tagPost.post = :post ORDER by tagPost.postTime"); 
    query.setMaxResults(n); // n is your expect newest number 
    
  2. 這個也很簡單:

    Query query = session.createQuery("select tagPost.post from TagPost as tagPost where tagPost.tag = :tag ORDER by tagPost.postTime"); 
    query.setMaxResults(n); // n is your expect newest number 
    

在這兩種情況下,你需要在致電query.list();(第一個案例post,第二個案例tag)。

感謝和編碼快樂!