2011-11-05 94 views
1

模型中選擇我有休眠數據庫有三個型號:最簡單的方法使用JPQL

Article - which has is part of multiple categories (EDIT). 
Category - which contains articles, and is part of an App 
App - which has different categories 

我想選擇其中有一個特定的應用程序的類別中的所有文章。 所以我想創造的東西,如:

find("ANY categories.app = ?", app).fetch(); 

事情是這樣的工作對我來說與CoreData,但明顯不是JPA,我似乎並沒有能夠找到如何做到這一點。

編輯: 澄清: 的文章:

@ManyToMany 
    public List<Category> categories; 

在類別:

@ManyToOne 
    public App app; 

    @ManyToMany(mappedBy = "categories") 
    public List<Article> articles; 
在應用

@OneToMany(mappedBy = "app") 
    public List<Category> categories; 

回答

0
select a from Article a where a.category.app = ? 

閱讀http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#queryhql

+0

當我嘗試這樣做時,我得到:java.lang.IllegalArgumentException:org.hibernate.QueryException:非法嘗試使用元素屬性引用[app]取消引用集合[article0_.id.categories] [SELECT a from models.Article一個WHERE a.lastUpdate>? AND a.categories.app =?]。 (類別而不是類別,因爲它是多對多的關係) –

+0

因此,文章有很多類別,是嗎?你說一個類別包含幾篇文章。所以這是一個ManyToMany關聯。在這種情況下,你需要一個明確的連接:從文章中選擇一個內部連接a.categories c,其中c.app =?。這在我鏈接到的文檔中有很好的解釋。閱讀它,這就是你將學習的方式。 –

+0

當你提到內部連接時,我感到不寒而慄,過去的一段時間裏的糟糕回憶......謝謝!我不記得了,不知道從哪裏開始。有時候我會用一種'老式'的方式來編寫SQL代碼,而這種代價很昂貴。所以謝謝你指出這是方式,它的工作原理!該文件非常有幫助! (並且抱歉沒有明確說明情況) –