【问题标题】:Easiest way to select within a model using JPQL使用 JPQL 在模型中选择的最简单方法
【发布时间】:2011-12-22 17:55:16
【问题描述】:

我有三个模型的休眠数据库:

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;

【问题讨论】:

    标签: sql hibernate jpa playframework jpql


    【解决方案1】:
    select a from Article a where a.category.app = ?
    

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

    【讨论】:

    • 当我尝试这样做时,我得到: java.lang.IllegalArgumentException: org.hibernate.QueryException: 非法尝试取消引用集合 [article0_.id.categories] 与元素属性引用 [app] [SELECT a来自models.Article a WHERE a.lastUpdate > ? AND a.categories.app = ?]。 (类别而不是类别,因为它是多对多关系)
    • 那么,一篇文章有​​很多分类,对吗?您说一个类别包含几篇文章。所以这是一个多对多关联。在这种情况下,您需要显式连接:从文章中选择 a 内部连接 ​​a.categories c where c.app = ?。这在我链接到的文档中得到了很好的解释。阅读它,这就是你的学习方式。
    • 当你提到内部连接时,我不寒而栗,过去的糟糕回忆......谢谢!想不起来了,也不知道从何说起。有时我会以一种“老式”的方式来编写 SQL,这太昂贵了。所以感谢您指出这是方法,它有效!文档很有帮助! (很抱歉没有说明清楚)
    • 起点始终相同:阅读文档。
    猜你喜欢
    • 2013-06-10
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    相关资源
    最近更新 更多