我有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
任何解决方案吗?
答案 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
找到更多信息