Mysql Хранимая процедура возвращает нулевой размер набора результатов при вызове из Hibernate - PullRequest
0 голосов
/ 14 июня 2019

У меня есть хранимая процедура, написанная на Mysql с использованием выражения WITH для общего табличного выражения (CTE). Эта хранимая процедура возвращает допустимые строки при вызове через Mysql Workbench, но возвращает ноль строк при вызове из Hibernate. Вот код хранимой процедуры.

Используемая версия Mysql: 8.0.16 MySQL Community Server Используемая версия Hibernate: 5.0

CREATE DEFINER=`sa`@`localhost` PROCEDURE `spXXXXXXXXXX`(
    -- Add the parameters for the stored procedure here
    IN testparam longtext,
    IN testCode varchar(20)
)
BEGIN

    -- format testparam '`a,b,c`' as ('a','b','c')
    if(testparam is NOT NULL AND testparam != '') then
        set testparam = REPLACE(testparam,', ',',');
        set testparam = REPLACE(testparam,'`','(''');
        set testparam = REPLACE(testparam,'`',''')');
        set testparam = REPLACE(testparam,',',''',''');
    end if;


    set @sqlQuery = concat('With CTE_Test as(select a.*,row_number() over (order by Last_Modified_Date desc )
                as row_num from XXXXXX a
                where XXXXX_Code in 
                (select XXXXX_Code FROM XXXXXXX where XXXXXXX in
                (select xxxxxx from testtbl where xxxxxxxx in (''',testparam,''')
                and active = 1 and Company_Code = ''',testCode,''')) 
                and a.active = 1 and a.Company_Code = ''',testCode,''')');

    set @sqlQuery = concat(@sqlQuery, ' select * from CTE_Test ');

     prepare query from @sqlQuery;
     EXECUTE query;
     deallocate prepare query;
END

Java-код:

Query storedProcedure = em.createNamedQuery("spXXXXXXXXX");
    storedProcedure.setParameter("testparam", testparam != null ? testparam.toString() : null);
    storedProcedure.setParameter("testCode", testCode);
    List<SpResponse> SectionList = (ArrayList<SpResponse>) storedProcedure.getResultList();
    logger.info("Result-->" + SectionList.size());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...