【问题标题】:How to pass array as a parameter to postgress function using hibernate?如何使用hibernate将数组作为参数传递给postgres函数?
【发布时间】:2017-05-09 09:56:47
【问题描述】:

我有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

有什么解决办法吗?

【问题讨论】:

  • 错误是什么?只需将数组传递给相应的参数即可。
  • @parladneupane 得到这个异常 org.postgresql.util.PSQLException: ERROR: syntax error at or near "where" Position: 649
  • 好吧,我没有看到任何where子句,发布详细信息功能
  • @parladneupane 我刚刚更新了错误,请查看。
  • 试试下面的答案。

标签: java postgresql hibernate


【解决方案1】:

您没有关闭代码 ")" 中的括号之一。你的代码应该是这样的

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

检查一下。

【讨论】:

  • 好的,") 的添加无论如何都是必需的,你试试放吗? , 有没有新的错误?
  • 另外你是类型转换,{2,3}'::int[],你应该改用IN(2,3)。
【解决方案2】:

在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找到更多信息

【讨论】:

    猜你喜欢
    • 2019-08-05
    • 2012-12-07
    • 1970-01-01
    • 2013-01-27
    • 2021-11-22
    • 2012-08-16
    • 2013-01-20
    • 1970-01-01
    相关资源
    最近更新 更多