如何解决“;预期的”,“;正在运行JPA查询
@Query(nativeQuery = true,value = "with\n"
+ " validBonansasAssignation as (\n"
+ " select aga.autorisation_bonansas_id,aga.autorisation_bonansa_assign_id as iBonansaAffectation_id,\n"
+ " s.site_id as ISiteNoTypeBaseData_id,s.desc_court as iSiteNoTypeBaseData_nom,\n"
+ " aga.dt_debut as iBonansaAffectation_dt_debut,aga.dt_fin as iBonansaAffectation_dt_fin\n"
+ " from AUTORISATION_BONANSA_ASSIGNATION aga\n"
+ " inner join site s on aga.site_id = s.site_id\n"
+ " where ?1 between aga.dt_debut and aga.dt_fin\n"
+ " )\n"
+ "select ag.AUTORISATION_BONANSAS_ID,ag.NOM,ag.PRENOM,ag.EULOGIN,ag.dt_Debut,ag.dt_Fin\n"
+ ",aga.iBonansaAffectation_id,aga.iSiteNoTypeBaseData_id,aga.iSiteNoTypeBaseData_nom\n"
+ ",aga.iBonansaAffectation_dt_debut,aga.iBonansaAffectation_dt_fin\n"
+ "from autorisation_bonansa ag\n"
+ "left join validBonansasAssignation aga on ag.autorisation_bonansas_id = aga.autorisation_bonansas_id\n"
+ "where ?1 between ag.dt_debut and ag.dt_fin\n"
+ "and ag.organisation_id = ?2")
List<AutoUsers> find(Date date,Long id);
但是运行测试时出现此错误:
org.springframework.orm.jpa.JpaSystemException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.7.2.v20180622-f627448): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.h2.jdbc.JdbcsqlException: Syntax error in sql statement "WITH
VALIDBONANSASASSIGNATION AS[*] (
SELECT AGA.AUTORISATION_BONANSAS_ID,AGA.AUTORISATION_BONANSA_ASSIGN_ID AS IBONANSAAFFECTATION_ID,S.SITE_ID AS ISITENOTYPEBASEDATA_ID,S.DESC_COURT AS ISITENOTYPEBASEDATA_NOM,AGA.DT_DEBUT AS IBONANSAAFFECTATION_DT_DEBUT,AGA.DT_FIN AS IBONANSAAFFECTATION_DT_FIN
FROM AUTORISATION_BONANSA_ASSIGNATION AGA
INNER JOIN SITE S ON AGA.SITE_ID = S.SITE_ID
WHERE ? BETWEEN AGA.DT_DEBUT AND AGA.DT_FIN
)
SELECT AG.AUTORISATION_BONANSAS_ID,AG.NOM,AG.PRENOM,AG.EULOGIN,AG.DT_DEBUT,AG.DT_FIN,AGA.IBONANSAAFFECTATION_ID,AGA.ISITENOTYPEBASEDATA_ID,AGA.ISITENOTYPEBASEDATA_NOM,AGA.IBONANSAAFFECTATION_DT_DEBUT,AGA.IBONANSAAFFECTATION_DT_FIN
FROM AUTORISATION_BONANSA AG
LEFT JOIN VALIDBONANSASASSIGNATION AGA ON AG.AUTORISATION_BONANSAS_ID = AGA.AUTORISATION_BONANSAS_ID
WHERE ? BETWEEN AG.DT_DEBUT AND AG.DT_FIN
AND AG.ORGANISATION_ID = ? "; expected ".,("; sql statement:
解决方法
您能像下面那样设置nativeQuery = true
并看看是否可行。
@Query(
value = "SELECT * FROM USERS u WHERE u.status = 1",nativeQuery = true)
,
由JPA
生成原始查询的方式形成了错误堆栈,我建议按如下所示进行更改并尝试,
我现在没有IDE可以以正确的格式实际修改查询,因此以SQL格式提供了查询,但目的是要在WITH
子句中定义列,因为您会在错误中看到它像WITH VALIDBONANSASASSIGNATION AS[*] (
这样生成的堆栈,而[*]
之后的AS
是Oracle无法识别并抛出语法错误的地方。
WITH VALIDBONANSASASSIGNATION
(
AUTORISATION_BONANSAS_ID,IBONANSAAFFECTATION_ID,ISITENOTYPEBASEDATA_ID,ISITENOTYPEBASEDATA_NOM,IBONANSAAFFECTATION_DT_DEBUT,IBONANSAAFFECTATION_DT_FIN
)
AS
(
SELECT AGA.AUTORISATION_BONANSAS_ID,AGA.AUTORISATION_BONANSA_ASSIGN_ID AS IBONANSAAFFECTATION_ID,S.SITE_ID AS ISITENOTYPEBASEDATA_ID,S.DESC_COURT AS ISITENOTYPEBASEDATA_NOM,AGA.DT_DEBUT AS IBONANSAAFFECTATION_DT_DEBUT,AGA.DT_FIN AS IBONANSAAFFECTATION_DT_FIN
FROM AUTORISATION_BONANSA_ASSIGNATION AGA
INNER JOIN SITE S
ON AGA.SITE_ID = S.SITE_ID
WHERE ? BETWEEN AGA.DT_DEBUT
AND AGA.DT_FIN
)
SELECT AG.AUTORISATION_BONANSAS_ID,AG.NOM,AG.PRENOM,AG.EULOGIN,AG.DT_DEBUT,AG.DT_FIN,AGA.IBONANSAAFFECTATION_ID,AGA.ISITENOTYPEBASEDATA_ID,AGA.ISITENOTYPEBASEDATA_NOM,AGA.IBONANSAAFFECTATION_DT_DEBUT,AGA.IBONANSAAFFECTATION_DT_FIN
FROM AUTORISATION_BONANSA AG
LEFT JOIN VALIDBONANSASASSIGNATION AGA
ON AG.AUTORISATION_BONANSAS_ID
= AGA.AUTORISATION_BONANSAS_ID
WHERE ? BETWEEN AG.DT_DEBUT AND AG.DT_FIN
AND AG.ORGANISATION_ID = ?
我尝试了一下,看是否有效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。