Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee JPA NamedQuery子查询_Jakarta Ee_Jpa_Named Query - Fatal编程技术网

Jakarta ee JPA NamedQuery子查询

Jakarta ee JPA NamedQuery子查询,jakarta-ee,jpa,named-query,Jakarta Ee,Jpa,Named Query,我正在对一个命名的查询发火。我用JPA。。我想要实现的是为一个指定的last状态(作为参数传递)选择所有具有活动标志的项目 以下是我的课程: 第条(intId) ArticleState(一篇文章可能有一个或多个状态,但只有处于活动状态) 状态(物品的状态) 拯救 草稿 返工 批准 存档 退休 我的问题是: @NamedQuery( name = "Article.listArticlesWithActiveFlags", query = "SELECT DISTINCT

我正在对一个命名的查询发火。我用JPA。。我想要实现的是为一个指定的last状态(作为参数传递)选择所有具有活动标志的项目

以下是我的课程:

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

  • 拯救
  • 草稿
  • 返工
  • 批准
  • 存档
  • 退休
我的问题是:

@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.带有活动标志的存档文章(如果它们被标记为“仍然有用”)

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

命名查询的调用方式如下: List articleswitthactiveflags=new ArrayList()

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

有什么想法吗


谢谢你

用@namednaviequiry代替@NamedQuery 你有一个例子吗

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

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

    return articlesWithActiveFlags;