【问题标题】:JPA + Hibernate + Named Query + how to JOIN a subquery resultJPA + Hibernate + 命名查询 + 如何加入子查询结果
【发布时间】:2011-01-23 17:25:50
【问题描述】:

谁能帮我将以下本机查询转换为命名查询?

本机查询:

选择 usr1.user_id,urr1.role_id,usr2.user_id,urr2.role_id,usr1.school_id, term.term_name, count(material.material_id) as "总书本", fpc.FOLLETT_PENDING_COUNT 作为“Follett 等待计数”, rrc.RESOLUTION_REQUIRED_COUNT 作为“所需的分辨率计数” 来自 va_school sch 在 sch.school_id=usr1.school_id 上加入 va_user_school_rel usr1 在 usr1.user_id=urr1.user_id 和 urr1.role_id=1001 上加入 va_user_role_rel urr1 在 sch.school_id=usr2.school_id 上加入 va_user_school_rel usr2 在 usr2.user_id=urr2.user_id 和 urr2.role_id=1002 上加入 va_user_role_rel urr2 在 term.school_id = usr1.school_id 上加入 va_term 术语 在 course.term_id = term.term_id 上加入 va_class 课程 在 material.class_id = course.class_id 上加入 va_material 材料 左连接 (选择 VA_CLASS.TERM_ID 作为“TERM_ID”,COUNT(*) 作为“FOLLETT_PENDING_COUNT” 从 VA_CLASS 加入 VA_MATERIAL ON VA_MATERIAL.CLASS_ID = VA_CLASS.CLASS_ID WHERE VA_CLASS.reference_flag = 'A' AND trunc(VA_MATERIAL.FOLLETT_STATUS) = 0 GROUP BY VA_CLASS.TERM_ID) fpc on term.term_id = fpc.term_id 左连接 (选择 VA_CLASS.TERM_ID 作为“TERM_ID”,COUNT(*) 作为“RESOLUTION_REQUIRED_COUNT” 从 VA_CLASS 加入 VA_MATERIAL ON VA_MATERIAL.CLASS_ID = VA_CLASS.CLASS_ID WHERE VA_CLASS.reference_flag = 'A' AND trunc(VA_MATERIAL.FOLLETT_STATUS) = 1 GROUP BY VA_CLASS.TERM_ID) rrc on term.term_id = rrc.term_id WHERE course.reference_flag = 'A' 按 usr1.user_id、urr1.role_id、usr2.user_id、urr2.role_id、usr1.school_id、term.term_name、fpc.FOLLETT_PENDING_COUNT、rrc.RESOLUTION_REQUIRED_COUNT 分组 按 usr1.school_id、term.term_name 排序;

提前致谢。

  • 斯利哈里

【问题讨论】:

    标签: hibernate jpa


    【解决方案1】:

    根据您的对象 Object 模型,您应该考虑查询的目的。如果应该制定 HQL 查询,那么查看您的 SQL 语句在语义上是一个问题。

    尽管如此,在基于 Hibernate 的应用程序中,即使是命名查询,也可以创建 theta 样式的查询,而且通常如此。

    HQL 查询在大多数情况下看起来与本地查询相同,只是它利用了对象模型的关系。这些关系对可能定义查询的方式有很大影响。而不是从School 实体开始。他们可能从User 数据集开始。

    SELECT ....
    FROM User user1, User user2
    JOIN User.school as school
    ...
    WHERE school = user2.school
    

    关注to one 关系确实更容易,因此我通常以某种方式重塑我的查询,他们倾向于以这种方式执行。

    【讨论】:

      【解决方案2】:

      我建议将其移至存储过程并从 JPA 调用存储过程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-03
        • 2012-02-15
        • 1970-01-01
        相关资源
        最近更新 更多