SQL запрос грамматического исключения при преобразовании рекурсивного запроса в JPQL - PullRequest
0 голосов
/ 16 февраля 2020

Это запрос JPQl, созданный из нижеприведенного SQL запроса:

SELECT * FROM NursingSectionHead head where head.secCode IN (" + 
            "WITH NUR_SECTIONS_SEC_CODE (secCode) " + 
            "AS (SELECT secCode " + 
            "FROM NursingSection " + 
            "WHERE secCode = (SELECT loc.nursingSecCode FROM LocationMast loc WHERE loc.id.locCode = :locCode) " + 
            "UNION ALL " + 
            "SELECT C1.secCode " + 
            "FROM NursingSection C1 " + 
            "INNER JOIN NUR_SECTIONS_SEC_CODE C2 ON C1.prevSec = C2.secCode)" + 
            "SELECT * FROM NUR_SECTIONS_SEC_CODE)

Это запрос SQL:

select * from IR_TB_NUR_SEC_HEAD head where HEAD.SEC_CODE IN (
WITH NUR_SECTIONS_SEC_CODE (SEC_CODE)
AS (
     SELECT SEC_CODE
    FROM IR_TB_NUR_SECTIONS
    WHERE SEC_CODE = (select LOC.NURSING_SEC_CODE from mst_tb_location_mast loc where LOC.LOC_CODE = 20023)

    UNION ALL

    SELECT C1.SEC_CODE
    FROM IR_TB_NUR_SECTIONS C1
    INNER JOIN NUR_SECTIONS_SEC_CODE C2 ON C1.PREV_SEC = C2.SEC_CODE
    )
SELECT *
FROM NUR_SECTIONS_SEC_CODE)

При выполнении он возвращает следующее ошибка:

"org.springframework.dao.InvalidDataAccessResourceUsageException: не удалось извлечь ResultSet; SQL [n / a]; вложенным исключением является org.hibernate.exception.SQLGrammarException: не удалось извлечь ResultSet"

Что я могу сделать с вышеуказанным исключением, пожалуйста?

1 Ответ

0 голосов
/ 16 февраля 2020

Используемое вами предложение WITH известно как Common Table Expression (CTE). Я почти уверен, что CTE не поддерживается JPQL, потому что если он поддерживается, никто специально не разработает библиотеку для поддержки запроса CTE, но только для Hibernate.

Но вы можете переключиться на использование собственного SQL, который всегда должен работать при условии, что ваш запрос действительно может быть успешно выполнен для базы данных, которую вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...