2013-01-15 115 views
1

鑑於這種兩個實體:彈簧數據JPA:如何使JPA標準查詢

post   post_category 
    - id   - post_id 
    - title  - name 
    - text 

我想使用JPA標準查詢此查詢,使:

select * from post 
where post.id in (
    select post_id from post_category 
    where name = '<category1>' and name = '<category2>' ... and name = '<categoryN>') 
+1

查看有關哪些問題可以在SO上進行的FAQ:http://stackoverflow.com/faq。目前這個問題是開放式的 - 我們不會爲你寫代碼。 –

+0

類似的一個在這裏 - http://stackoverflow.com/a/13912967/366964一些快速入門的變化。 –

回答

0

看着你查詢草圖我認爲它不會返回任何結果。我改變它意味着name in ('<category1>','<category2>', ...)。這可能與您的情況不符。

這假設您已將您的映射正確設置在您的類上以便JPA正常工作。例如

class PostCategory { 
     private String name; 
     private Post post; 
     ... 
     @ManyToOne 
     public Post getPost() { 
      return post; 
     } 
     ... 

在這種情況下,你的DAO代碼將類似於這個(給定一個列表nameValues對象)

// Set up the subquery 
    DetachedCriteria dc = DetachedCriteria.forClass(PostCategory.class) 
     .setProjection(Projections.property("post.id")) 
     .add(Restrictions.in("name", nameValues)); 

    Criteria crit = session.createCriteria(Post.class) 
     .add(Subqueries.eqProperty("id", dc)); 

但如果你想裏面有所有的類別,然後張貼對象的列表,你會需要爲每個類別製作一個單獨的DetachedCriteria實例,並將它們分別添加爲AND'ed子查詢。