JPQL查询出错:“意外令牌:(第1行附近)

时间:2014-06-30 08:49:47

标签: sql jpql

我有这个工作的SQL查询:

select temp.pratica_regola_id FROM ( SELECT TABLE1.pratica_regola_id, TABLE1.CON  FROM ( SELECT pratica_regola_id, COUNT(*) AS CON FROM (SELECT DISTINCT PRATICA_REGOLA_ID, ENTITA_LEGAME_ID FROM legame_regola_pratica L1 LEFT JOIN (select LRP.entita_legame_id AS EL1 from legame_regola_pratica LRP JOIN entita_legame EL ON LRP.entita_legame_id = EL.entita_legame_id where LRP.pratica_regola_id = 418 AND LRP.REGOLA_ID = 1426 AND el.tp_entita_legame_id =1 ) TAB_ENT_LEG ON TAB_ENT_LEG.EL1 = L1.entita_legame_id WHERE  TAB_ENT_LEG.EL1 IS NOT NULL AND l1.tp_livello_legame_id = 2 and l1.pratica_regola_id in (select pratica_regola_id from pratica_regola where tp_stato_pratica_id = 2)) GROUP BY PRATICA_REGOLA_ID ) TABLE1 INNER JOIN ( SELECT pratica_regola_id, COUNT(*) AS TOT FROM (SELECT DISTINCT PRATICA_REGOLA_ID, ENTITA_LEGAME_ID FROM legame_regola_pratica L1) group by pratica_regola_id) TABLE2 on TABLE1.pratica_regola_id = TABLE2.pratica_regola_id where TABLE1.CON = TABLE2.TOT) temp WHERE CON = (SELECT COUNT(*) FROM legame_regola_pratica where pratica_regola_id = 418 AND REGOLA_ID = 1426 and dat_ora_can is null) and pratica_regola_id <> 418;

我尝试用这种方式在JPQL中翻译它:

@Query("SELECT TABLE_TEMP_1.praticaRegolaId FROM ("
        + "SELECT TABLE_TEMP_2.praticaRegolaId, TABLE_TEMP_2.numero_entita FROM ("
        + "SELECT praticaRegolaId, COUNT(*) AS numero_entita FROM (SELECT DISTINCT PraticaRegola.praticaRegolaId, EntitaLegame.entitaLegameId FROM LegameRegolaPratica LRP_1 LEFT JOIN ("
        + "SELECT LRP.entitaLegame.entitaLegameId AS EL_1 FROM LegameRegolaPratica LRP JOIN EntitaLegame EL ON LRP.entitaLegame.entitaLegameId = EL.entitaLegameId"
        + "WHERE LRP.praticaRegola = :praticaRegola AND LRP.regola = :praticaRegola.regola AND EL.tpEntitaLegame = :tipoEntitaLegame)"
        + "TAB_ENT_LEG ON TAB_ENT_LEG.EL_1 = LRP_1.entitaLegame.entitaLegameId WHERE TAB_ENT_LEG.EL_1 IS NOT NULL AND LRP_1.tpLivelloLegame = :tipoLivelloLegame AND LRP_1.praticaRegola.praticaRegolaId IN (SELECT praticaRegolaId FROM"
        + " praticaRegola WHERE tpStatoPratica = :tipoStatoPratica))"
        + "GROUP BY praticaRegolaId) AS TABLE_TEMP_2"
        + "INNER JOIN ("
        + "SELECT praticaRegolaId, COUNT(*) AS TOT FROM (SELECT DISTINCT LRP_1.praticaRegola.praticaRegolaId, LRP_1.entitaLegame.entitaLegameId FROM LegameRegolaPratica LRP_1) GROUP BY praticaRegolaId"
        + ") TABLE_TEMP_3" + "ON TABLE_TEMP_2.praticaRegolaId = TABLE_TEMP_3.praticaRegolaId" + "WHERE TABLE_TEMP_2.NUMERO_ENTITA = TABLE_TEMP_3.TOT )"
        + "AS TABLE_TEMP_1 WHERE NUMERO_ENTITA = (SELECT COUNT(*) FROM LegameRegolaPratica WHERE praticaRegola = :praticaRegola"
        + "AND regola = :praticaRegola.regola AND dataOraCancellazione IS NULL) ")

但我收到此错误消息:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ( near line 1, column 42 [SELECT TABLE_TEMP_1.praticaRegolaId FROM (SELECT TABLE_TEMP_2.praticaRegolaId, TABLE_TEMP_2.numero_entita FROM (SELECT praticaRegolaId, COUNT(*) AS numero_entita FROM (SELECT DISTINCT PraticaRegola.praticaRegolaId, EntitaLegame.entitaLegameId FROM it.aivebst.adaprice.rules.entities.LegameRegolaPratica LRP_1 LEFT JOIN (SELECT LRP.entitaLegame.entitaLegameId AS EL_1 FROM it.aivebst.adaprice.rules.entities.LegameRegolaPratica LRP JOIN EntitaLegame EL ON LRP.entitaLegame.entitaLegameId = EL.entitaLegameIdWHERE LRP.praticaRegola = :praticaRegola AND LRP.regola = :praticaRegola.regola AND EL.tpEntitaLegame = :tipoEntitaLegame)TAB_ENT_LEG ON TAB_ENT_LEG.EL_1 = LRP_1.entitaLegame.entitaLegameId WHERE TAB_ENT_LEG.EL_1 IS NOT NULL AND LRP_1.tpLivelloLegame = :tipoLivelloLegame AND LRP_1.praticaRegola.praticaRegolaId IN (SELECT praticaRegolaId FROM praticaRegola WHERE tpStatoPratica = :tipoStatoPratica))GROUP BY praticaRegolaId) AS TABLE_TEMP_2INNER JOIN (SELECT praticaRegolaId, COUNT(*) AS TOT FROM (SELECT DISTINCT LRP_1.praticaRegola.praticaRegolaId, LRP_1.entitaLegame.entitaLegameId FROM it.aivebst.adaprice.rules.entities.LegameRegolaPratica LRP_1) GROUP BY praticaRegolaId) TABLE_TEMP_3ON TABLE_TEMP_2.praticaRegolaId = TABLE_TEMP_3.praticaRegolaIdWHERE TABLE_TEMP_2.NUMERO_ENTITA = TABLE_TEMP_3.TOT )AS TABLE_TEMP_1 WHERE NUMERO_ENTITA = (SELECT COUNT(*) FROM it.aivebst.adaprice.rules.entities.LegameRegolaPratica WHERE praticaRegola = :praticaRegolaAND regola = :praticaRegola.regola AND dataOraCancellazione IS NULL) ]
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)

谢谢

1 个答案:

答案 0 :(得分:1)

您可能没有HQL查询的from子句中的子查询。使用本机SQL查询。

引自the documentation

  

请注意,HQL子查询只能出现在select或where子句中。