我正在使用hibernate来调用Postgres array_agg
函数。问题是我需要通过包含的顺序调用该函数。我无法通过hibernate以正确的语法传递顺序,所以我需要创建一个函数,它完全按照array_agg
执行自动排序。这是我需要在函数中复制的内容:
array_agg(table.TEXT order by table.text asc)
我已经尝试过并试过但我无法弄明白 - 谷歌并没有多大帮助。提前谢谢!
答案 0 :(得分:0)
您可以通过将有序集合提供给聚合函数来替换丢失的特征 - 这在Postgres中有效但不是标准的SQL方法(如@Richard在其评论中提到的):
SELECT array_agg(sub.text) AS ordered_array
FROM (SELECT text FROM tbl ORDER BY text) sub
或者,对于这样的简单案例,只需使用array constructor代替:
SELECT ARRAY( SELECT text FROM tbl ORDER BY 1 ) AS ordered_array
你应该能够用有限的Hibernate手段来实现它。
答案 1 :(得分:0)
我只是通过创建自定义聚合函数并使用最终函数(FFUNC)
来解决这个问题CREATE OR REPLACE FUNCTION order_func(anyarray) RETURNS anyarray AS $BODY$
BEGIN
return ARRAY(SELECT unnest($1) ORDER BY 1);
END;
$BODY$ LANGUAGE 'plpgsql';
CREATE AGGREGATE array_agg_order_func(anyelement) (
SFUNC=array_append,
STYPE=anyarray,
FFUNC=order_func,
INITCOND='{}'
);
然后将聚合数组传递给排序函数。