Spring JPA postgresql — структура ОШИБКИ запроса не соответствует типу результата функции

#postgresql #spring-boot #hibernate #spring-data-jpa #hibernate-mapping

#postgresql #spring-boot #спящий режим #spring-data-jpa #спящий режим-отображение

Вопрос:

Я создал следующую функцию postgresql:

 create function test(arg1 character varying, arg2 character varying)
returns SETOF "INVENTORY"
language plpgsql
as
$$   
declare i1 character varying[] = string_to_array(arg1, ',');
        i2 character varying[] = string_to_array(arg2, ',');
begin
  SELECT * FROM "INVENTORY"
        JOIN unnest(i1) t1(c) ON "COLUMN_1" = t1.c
        JOIN unnest(i2) t2(c) ON "COLUMN_2" = t2.c;
end;
$$;
  

Я вызываю метод postgresql из моего приложения spring boot следующим образом:

 @Query(nativeQuery = true, value = "select public."test"(:arg1,:arg2)")
    List<Inventory> invokeTest(String arg1, String arg2);
  

Я получаю следующую ошибку:

   ERROR 30656 --- [nio-8080-exec-2] o.h.engine.jdbc.spi.SqlExceptionHelper   : ERROR: structure of query does not match function result type
  Detail: Number of returned columns (10) does not match expected column count (8).
  Where: PL/pgSQL function getucdinventorywithstringbuilder(character varying,character varying) line 5 at RETURN QUERY
  ERROR 30656 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet] with root cause
  org.postgresql.util.PSQLException: ERROR: structure of query does not match function result type
  Detail: Number of returned columns (10) does not match expected column count (8).
  Where: PL/pgSQL function getucdinventorywithstringbuilder(character varying,character varying) line 5 at RETURN QUERY
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2533) ~[postgresql-42.2.12.jar:42.2.12]
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2268) ~[postgresql-42.2.12.jar:42.2.12]
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:313) ~[postgresql-42.2.12.jar:42.2.12]
    at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:448) ~[postgresql-42.2.12.jar:42.2.12]
    at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:369) ~[postgresql-42.2.12.jar:42.2.12]
    at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:159) ~[postgresql-42.2.12.jar:42.2.12] ....
  

Я понимаю, что в моей таблице «ИНВЕНТАРЬ» 8 столбцов, но поскольку я выполняю объединение, в результат моего запроса включены два дополнительных столбца из объединенных таблиц, что не соответствует моему типу возвращаемого значения.

Я попытался изменить возвращаемый тип на таблицу с 10 столбцами следующим образом:

 create function test(arg1 character varying, arg2 character varying)
    returns table(
          column1 character varying, ..... , column10 character varying
   )
    language plpgsql
    as
    $$   
    declare i1 character varying[] = string_to_array(arg1, ',');
            i2 character varying[] = string_to_array(arg2, ',');
    begin
      SELECT * FROM "INVENTORY"
            JOIN unnest(i1) t1(c) ON "COLUMN_1" = t1.c
            JOIN unnest(i2) t2(c) ON "COLUMN_2" = t2.c;
    end;
    $$;
  

но я получаю следующую ошибку JPA :

 org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
  

Как я могу решить эту проблему?

Комментарии:

1. Сообщение об ошибке ясно — нет функции, подобной опубликованной выше. Вы уверены, что используете одну и ту же базу данных для создания функции и в приложении Spring? Нет ли ошибок при создании функции на стороне базы данных? Другая идея: также может быть проблема с «test » в вашем собственном запросе. Попробуйте удалить дополнительные символы и просто перейдите к public.test

2. Вы правы! Это была проблема с чувствительностью к регистру, которая была исправлена

3. @KamilGosciminski, я отредактировал свой вопрос с новой проблемой. Не могли бы вы помочь мне в решении проблемы?