2011-11-05 128 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代码,而这种代价很昂贵。所以谢谢你指出这是方式,它的工作原理!该文件非常有帮助! (并且抱歉没有明确说明情况) –