Jakarta ee JPA NamedQuery子查询
我正在对一个命名的查询发火。我用JPA。。我想要实现的是为一个指定的last状态(作为参数传递)选择所有具有活动标志的项目 以下是我的课程: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
- 第条(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;