从子句中的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子查询的主要内容,如果未能解决你的问题,请参考以下文章
Windows 7中的JPA Eclipselink查询解析问题
在 JPA 的 SQL 查询中的 FROM 语句中包含子查询
Oracle 中的 Spring Data JPA + EclipseLink