将根作为函数属性条件查询传递
pass root as function attribute criteria query
我有一个 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$;
如何将参数正确传递给这个函数?
要使用 CriteriaBuilder 函数传递 my_entity0_.id,您可以尝试以下代码,
Expression<String> myFunction= cb.function("my_function", String.class, root.get("id"));
我只是放弃并创建了一个新函数,它需要 N 个参数而不是 entity/row:
Expression<String> calcSubStatus = cb.function("my_new_function", String.class,
attr1, attr2, attr3, attr4, attr5, attrN);
CREATE OR REPLACE FUNCTION my_new_function(
IN "ATTR1" character varying,
IN "ATTR2" character varying,
IN "ATTR3" character varying,
IN "ATTR4" character varying,
IN "ATTR5" character varying,
IN "ATTRN" character varying)
RETURNS character varying
LANGUAGE 'plpgsql'
AS $BODY$BEGIN
... some logic ...
RETURN some_calculated_result;
END;$BODY$;
我有一个 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$;
如何将参数正确传递给这个函数?
要使用 CriteriaBuilder 函数传递 my_entity0_.id,您可以尝试以下代码,
Expression<String> myFunction= cb.function("my_function", String.class, root.get("id"));
我只是放弃并创建了一个新函数,它需要 N 个参数而不是 entity/row:
Expression<String> calcSubStatus = cb.function("my_new_function", String.class,
attr1, attr2, attr3, attr4, attr5, attrN);
CREATE OR REPLACE FUNCTION my_new_function(
IN "ATTR1" character varying,
IN "ATTR2" character varying,
IN "ATTR3" character varying,
IN "ATTR4" character varying,
IN "ATTR5" character varying,
IN "ATTRN" character varying)
RETURNS character varying
LANGUAGE 'plpgsql'
AS $BODY$BEGIN
... some logic ...
RETURN some_calculated_result;
END;$BODY$;