2011-12-02 83 views
4

看看下面的例子實體:加入兩個表與Hibernate標準

Entity Child { 
    long id; 
    String name; 
    long parentKey; 
} 

Entity Parent { 
    long id; 
    String desc; 
} 

是否有與Hibernate條件查詢方式:

select * from Child c, Parent p 
     where c.parentKey = p.id and c.name = "whatever" and p.desc = "whatever" 

我們主要關心的是怎麼辦跨越加入與標準兩個實體只通過長鍵與 相關聯。

假設我們不能直接在我們的孩子中提及父母。

+0

「沒有直接提及父母在我們的孩子」意味着它是一個單向關係,從父母到孩子 – frictionlesspulley

+0

必須是多頭?你能爲孩子創建一個Key對象嗎? – Luke

回答

1

好,不知道是什麼版本的Hibernate你指的是,但在JPA 2.0這樣的事情是可能的:

String query = "SELECT c FROM Child c, Parent p WHERE c.parentId = p.id"; 

List<Child> children = em.createQuery(query, Child.class).getResultList(); 

這樣你明確做JOIN根據您的自定義狀態,讓代替JPA管理它,儘管這樣做完全合法。

+0

嗨Piotr,謝謝你的回覆。如果我們希望結果集包含來自Child和Parent(不僅僅是Child)的數據,我知道HQL可以處理,但是有什麼方法可以使用Criteria API?還是Criteria只允許返回一個特定類的實體? (例如父母或小孩,但不是兩者)? –

+0

我不太清楚如何理解它。我發佈的查詢只返回'Child'實體 - 不是'Parent' **和**'Child'。你能否詳細說明一下? –

+0

我投下了這個答案,因爲問題是關於** Criteria API ** – JimHawkins