从子句中的jpa eclipselink子查询

Posted

技术标签:

【中文标题】从子句中的jpa eclipselink子查询【英文标题】:jpa eclipselink subquery in from clause 【发布时间】:2015-12-30 13:26:30 【问题描述】:

我在这里读到 https://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#Sub-selects_in_FROM_clause

那个eclipselink在from子句中支持子查询

但是当我使用这个查询时

queryString2="SELECT NEW dz.com.naftal.erp.domain.view.MouvementProduitView('VAR',t.cds,SUM(t.mntttc)) " +
             "FROM (SELECT DISTINCT m.mouvementProduitViewPK.cds as cds,m.mouvementProduitViewPK.referenceDocument,m.mouvementProduitViewPK.typeDocument " +
             "m.mntttc as mntttc FROM MouvementProduitView m WHERE m.mouvementProduitViewPK.cds IN :cdss " +
             "AND m.mouvementProduitViewPK.typeDocument IN :typeDocuments " +
             "AND m.dateOperation BETWEEN :dateDu AND :dateAu GROUP BY m.mouvementProduitViewPK.cds ORDER BY m.mouvementProduitViewPK.cds) AS t GROUP BY t.cds"

我收到了这个错误

SEVERE [global]
Local Exception Stack: 
Exception [EclipseLink-0] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Syntax error parsing [SELECT NEW.............. 
[388, 388] The right parenthesis is missing from the sub-expression.
[389, 389] An identification variable must be provided for a range variable declaration.
[426, 447] The query contains a malformed ending.

有没有朋友知道 from 子句中的子查询是否真的在工作,如果不知道有没有其他方法可以做到这一点,除非使用原生查询。

PS:我使用的是 eclipselink 2.5.0.v20130507

【问题讨论】:

显示“SELECT NEW ...”的错误和没有该文本的查询?所以你不会提出相同的查询 粘贴了错误的查询,检查修改过的。 该消息与子查询无关,与“选择新”有关。那么你是如何调用它的呢?您在 FROM 中也没有候选实体,而 EclipseLink 页面示例确实有一个候选实体。 我在 MouvementProduitView 中有一个带有 3 个参数的构造函数,所以如果我使用 select new .... from MouvementProduitView m 它可以工作,我也尝试将实体与选择子查询,我得到了同样的错误 @NeilStockton,它是候选实体,我第一次尝试时它不起作用,因为我有语法错误(子查询中的 GROUP BY 子句),所以你有权利回答 【参考方案1】:

您的错误很简单:您的查询格式错误,在 select distinct 中缺少逗号...您有:

SELECT DISTINCT 
    m.mouvementProduitViewPK.cds as cds,
    m.mouvementProduitViewPK.referenceDocument,
    m.mouvementProduitViewPK.typeDocument //Here is missing the comma
    m.mntttc as mntttc 
FROM MouvementProduitView m 

第三行和第四行之间少了逗号,应该是:

SELECT DISTINCT 
    m.mouvementProduitViewPK.cds as cds,
    m.mouvementProduitViewPK.referenceDocument,
    m.mouvementProduitViewPK.typeDocument, //put at the end of this line the comma
    m.mntttc as mntttc 
FROM MouvementProduitView m

【讨论】:

不是那个,但是还是有语法错误,我忘了从子查询中去掉GROUP BY子句【参考方案2】:

尝试删除子查询后的“AS”字符串。您介绍的文章没有使用这种结构。

【讨论】:

我的错^^',我粘贴了错误的查询,检查编辑的帖子。

以上是关于从子句中的jpa eclipselink子查询的主要内容,如果未能解决你的问题,请参考以下文章

from 子句中的 JPA/hibernate 子查询

Windows 7中的JPA Eclipselink查询解析问题

在 JPA 的 SQL 查询中的 FROM 语句中包含子查询

Oracle 中的 Spring Data JPA + EclipseLink

无法在 FROM 子句中使用子查询编写 JPQL 查询 - Spring Data Jpa - Hibernate

无法在 FROM 子句中使用子查询编写 JPQL 查询 - Spring Data Jpa - Hibernate