将根作为函数属性标准查询传递

问题描述 投票:0回答:1

我有一个postgreSQL定制函数,它需要一个类型为“ my_entity”的属性。

在SQL中,我可以正常调用此函数:

select my_function(t) from my_entity t;

现在我需要使用CriteriaQuery调用相同的函数,但是当我尝试时,hibernate生成一个带有my_table.id而不是元组本身的SQL语句:

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$;

如何正确地将参数传递给此函数?

postgresql hibernate criteria
1个回答
0
投票

要使用CriteriaBuilder函数传递my_entity0_.id,您可以尝试下面的代码,

Expression<String> myFunction= cb.function("my_function", String.class, root.get("id"));
© www.soinside.com 2019 - 2024. All rights reserved.