如何使用hibernate将数组作为参数传递给postgress函数?

时间:2017-05-09 09:56:47

标签: java postgresql hibernate

我有postgres功能

select public.getinventoryhistory('05/01/2017','05/09/2017','{2,3}'::int[]);

现在我想使用hibernate将这些参数传递给postgres函数。

我用这种方式编写了java代码

SQLQuery sqlQuery = session.createSQLQuery("select public.getinventoryhistory(:startDate,:endDate,:arrayParameter)");
sqlQuery.setParameter("startDate", startDate);
sqlQuery.setParameter("endDate", endDate);
sqlQuery.setParameter("arrayParameter", new Integer[]{2,3});

但是上面的代码无效并且异常

org.postgresql.util.PSQLException: ERROR: syntax error at end of input Position: 648

任何解决方案吗?

2 个答案:

答案 0 :(得分:0)

您未在代码“)”中关闭其中一个括号。您的代码应该是

SQLQuery sqlQuery = session.createSQLQuery("select public.getinventoryhistory(:startDate,:endDate,:arrayParameter)");

检查一下。

答案 1 :(得分:-1)

在postgre和mysql中调用存储过程在hibernate中类似。

mysql中接受数组的过程:

DELIMITER ;;
create procedure listPhones(in numbers varchar(255))

BEGIN

set @query = concat('select * from phone where number in (',numbers,');');
prepare sql_query from @query;
execute sql_query;

END
;;

DELIMITER ;

从休眠中调用它:

@Test
    public void testProcedure() {
        saveData();

        session = sessionFactory.getCurrentSession();
        session.beginTransaction();

        StoredProcedureQuery procedure = session.createStoredProcedureQuery("listPhones");
        procedure.registerStoredProcedureParameter(0, String.class, ParameterMode.IN);

        List<Object[]> phones = procedure.setParameter(0, "22222287832,33333287832").getResultList();
        phones.forEach(array -> System.out.println(Arrays.toString(array)));
    }

您可以在https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#sql-sp

找到更多信息