передать root как запрос критерия атрибута функции - PullRequest
0 голосов
/ 02 февраля 2020

У меня есть postgreSQL пользовательская функция, которая требует один атрибут типа "my_entity".

В SQL Я могу вызвать эту функцию нормально:

select my_function(t) from my_entity t;

Теперь, что я нужно вызвать эту же функцию с помощью CriteriaQuery, но при попытке hibernate генерирует оператор SQL с my_table.id вместо самого кортежа:

select my_function(my_entity0_.id) from my_entity my_entity0_;

Мой код:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<MyEntity> cq = cb.createQuery(MyEntity.class);
Root<MyEntity> root = cq.from(MyEntity.class);

Expression<String> myFunction= cb.function("my_function", String.class, root);
cq.select(myFunction);

return em.createQuery(cq).getResultList();

Функция:

CREATE OR REPLACE FUNCTION my_function(
      IN "T" my_entity)
RETURNS character varying
LANGUAGE 'plpgsql'

AS $BODY$BEGIN

    ... some logic ...

    RETURN some_calculated_result;

END;$BODY$;

Как правильно передать аргумент этой функции?

1 Ответ

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

Для передачи my_entity0_.id с помощью функции CriteriaBuilder, вы можете попробовать следующий код,

Expression<String> myFunction= cb.function("my_function", String.class, root.get("id"));
...