Вызов функции с составным типом в качестве аргумента из собственного запроса в jpa - PullRequest
0 голосов
/ 02 июля 2019

Я создал составной тип и функцию postgres следующим образом:

CREATE TYPE  test AS (a int, b timestamp, c int);

CREATE FUNCTION some_updates(t test[])
    begin
    // iterate t and perform operation
    end

select some_updates(CAST(array[(488,'2019-7-01',342)] AS test[])

Вышеупомянутая функция и выбор для вызова функции работают правильно.

Весной jpa я хотел бы вызвать функциюи передать значения для «test []» как параметры из собственного запроса.Однако это приводит к ошибке.

@Query(value="select * from some_updates(:myinput)")
Myclass getDetails(List<test> myinput);

Я создал тест класса pojo следующим образом

class test
{
    int a;
    timestamp b;
    int c;

    //getters and setters
}

Как я могу передать значения в функцию postgres?

1 Ответ

0 голосов
/ 02 июля 2019

Передайте массив литерал вместо конструктора массива.Значение может быть передано в виде строкового литерала , затем оно приводится к нужному типу Postgres:

SELECT some_updates('{"(488, 2019-07-01 00:00:00,342)"}');

Условие: функция не «перегружена», так что разрешение типа функцииоднозначно с нетипизированным вводом.

Связанный:

Если у вас меньшеДля 100 элементов массива функция VARIADIC поможет упростить передачу аргументов:

CREATE FUNCTION some_updates(VARIADIC t test[]) ...

Затем передайте строковые литералы, такие как:

SELECT some_updates('(488, 2019-07-01 00:00:00,342)'
                  , '(489, 2019-07-02 00:00:00,343)')

См .:

Если вам нужно пропустить (много) больше строк, попробуйте записать их во (временную) таблицу с простым INSERT и обрабатывает их оттуда.

...