【问题标题】:JPA NamedQuery Sub QueryJPA NamedQuery 子查询
【发布时间】:2013-03-01 17:34:38
【问题描述】:

我在命名查询上大吃一惊。我使用 JPA.. 我想要实现的是选择所有带有活动标志的文章,用于特定的最后状态(作为参数传递)。

这是我的课程:

  • 文章 (intId)
  • ArticleState(一篇文章可能有一个或多个状态,但只有处于活动状态)
  • 状态(物品的状态)

    1. 已保存
    2. 草稿
    3. 返工
    4. 已批准
    5. 已存档
    6. 退休

这是我的查询:

@NamedQuery(
    name =  "Article.listArticlesWithActiveFlags",
    query = "SELECT DISTINCT article " +
            "FROM Article article " +
            "INNER JOIN article.articleFlags articleFlag " +
            "INNER JOIN article.articleStates articleState " +
            "WHERE articleFlag.active = true " +
            "AND articleState.state.intId = :intStateId " + 
            "AND articleState.intId = ( " + 
            "      SELECT MAX(articleState2.intId) " +  
            "      FROM Article article2 " + 
            "      INNER JOIN article2.articleStates articleState2 " +  
            "      WHERE articleState2.state.intId = :intStateId " +
            "      AND articleState2.article.intId = article.intId " +
            "      GROUP BY article2.intId) "
),  

查询运行良好,没有任何错误。我的问题:假设我有一篇具有以下生命周期的文章:

2012-02-24:已创建,因此处于“已保存”状态 2012-02-25:提交审批,目前处于“草案”状态 2012-02-26:版主修改文章以符合特定标准,因此现在处于“返工”状态 2012-03-01:这篇文章现在被整个社区批准了,所以现在是“批准” 2014-03-01:文章现在已归档,因为它不再有用。

因此,文章经历了所有可能的状态。我的要求是显示两个单独的列表: 1. 带有活动标志的已批准文章(以防它们需要一些更改) 2. 带有活动标记的存档文章(以防它们被标记为“仍然有用”)

我的问题是我的文章显示在两个列表中(已批准和已归档),即使最后一个状态实际上是“已归档”。

命名查询是这样调用的: 列出文章WithActiveFlags = new ArrayList();

    Query q = em.createNamedQuery("Article.listArticlesWithActiveFlags");
    q.setParameter("intStateId", intStateId);

    articlesWithActiveFlags = q.setMaxResults(intRowLimit).getResultList();

    return articlesWithActiveFlags;

查询被调用两次,每个列表调用一次。我已经使用Eclipse调试模式验证了参数,它们传递了不同的参数(4个批准,5个归档),这是正确的。

有什么想法吗?

谢谢

【问题讨论】:

    标签: jakarta-ee jpa named-query


    【解决方案1】:

    使用@NamedNativeQuery 代替@NamedQuery here你有例子

    【讨论】:

      猜你喜欢
      • 2012-07-11
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      相关资源
      最近更新 更多