2017-05-09 21 views
0

我有Postgres的功能如何使用hibernate將數組作爲參數傳遞給postgress函數?

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

@paarladneupane得到這個異常org.postgresql.util.PSQLException:錯誤:在「where」處或附近的語法錯誤 位置:649 – rajesh

+0

好吧,我沒有看到任何where子句,發佈詳細信息功能 –

回答

0

您沒有關閉代碼中的一個括號「)」。您的代碼應該看起來像

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

檢查。

+0

此解決方案不起作用。 – rajesh

+0

好吧,無論如何,添加'「)'是否需要,你有嘗試嗎?,是否有新錯誤? –

+0

你也是類型轉換,'{2,3}':: int []',你應該改用'IN(2,3)'代替。 –

0

在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

相關問題