Как вызвать функцию PostgreSQL, которая возвращает курсор в Hibernate? - PullRequest
0 голосов
/ 14 июля 2020

У меня есть функция в PostgreSQL, которая загружает некоторые объекты и возвращает курсор:

create function load()
  returns refcursor
  language plpgsql
  ...

Как вызвать ее с помощью Hibernate? Я пытаюсь использовать именованный запрос гибернации:

<sql-query name="loadEntities" callable="true">
    <return class="com.test.MyEntity"/>
    <![CDATA[
        { ?= call loadEntities() }
    ]]>
</sql-query>

java:

this.getSession().getNamedQuery("loadEntities").list();

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

org.postgresql.util.PSQLException: This statement does not declare an OUT parameter.  Use { ?= call ... } to declare one.

Я могу использовать select для вызова функции:

<sql-query name="loadEntities">
    <return class="com.test.MyEntity"/>
    <![CDATA[
        select loadEntities()
    ]]>
</sql-query>

, но тогда у меня есть:

org.postgresql.util.PSQLException: The column name id was not found in this ResultSet.

(потому что выбор возвращает имя курсора вместо столбцов данных).

...