首页 > 解决方案 > Postgres:从spring jdbc模板调用函数

问题描述

使用 spring StoredProcedure 中的自定义类型调用 postgres 函数的正确方法是什么?

假设我有一个定义的函数和自定义类型:

CREATE OR REPLACE FUNCTION addUser(user IN O_USER) RETURNS VOID
AS
$$
BEGIN

end;
$$ language plpgsql;

CREATE TYPE O_USER AS (
  id NUMERIC,
  name VARCHAR(50)
);

从 Spring 调用它时,我将用户对象转换为 String,如下所示:

public class AddUserProcedurePostgres extends StoredProcedure {

    public AddUserProcedurePostgres(DataSource dataSource) {
        super(dataSource, "addUser");
        setFunction(true);

        declareParameter(new SqlParameter("i_User", Types.OTHER, "O_USER"));

        compile();
    }

    public void execute(SessionContext sessionContext, Dashboard dashboard) {

        Map<String, Object> input = new HashMap<>();
        input.put("i_User", "(1,Vishal)");

        execute(input);
    }

}

现在我的问题是:

  1. 创建一个对应对象的String然后传递它是正确的方法吗?或者有没有更好的方法?

  2. 假设我需要在现有的 O_USER 中添加其他自定义类型的数组,那么字符串需要如何格式化?

CREATE TYPE O_USER AS (
  id NUMERIC,
  name VARCHAR(50)
  addresses O_ADDRESS[]
);

标签: javaspringpostgresqlstored-proceduresspring-data

解决方案


推荐阅读