2017-09-19 69 views
1

我有一個程序是這樣的:Oracle存儲過程執行的Hibernate查詢

create or replace PROCEDURE Greeting1 IS sqlstmt varchar2(400); 
BEGIN 
    sqlstmt:= 'select * from Object_set'; 
    EXECUTE immediate sqlstmt; 
END; 

我想在Java代碼中執行它是這樣的:

List<String> result = null; 
Query query = getEm().unwrap(Session.class).createSQLQuery("CALL Greeting1()"); 
    if(query.list() != null) { 
     result = query.list(); 
    } 
return result; 

但同時獲得查詢提示錯誤。名單()。實際上它在查詢對象中返回null。 我應該如何得到正確的結果列表。請建議我。

回答

0

我想這是不可能的使用query.list();方法 當我需要inovke在一個Hibernate + Spring環境中的存儲過程我最常做的是這樣的:

//sessionFactory objext is autowired in this DAO 
Session hibSession = sessionFactory.getCurrentSession(); 
hibSession.doWork(new Work() 
{ 
    @Override 
    public void execute(Connection sqlConnection) throws SQLException 
    { 
     //Here I call the stored procedure and valorize my java POJOS if needed 
    } 
}); 

我希望這是有用的

Angelo

1

我不太瞭解Oracle的存儲過程,但JPA設置了一個接口來執行存儲過程,您應該閱讀以下內容:Calling Stored procedure with Hibernate

這會照顧您使用IN,OUTIN OUT參數的情況,否則對於存儲的功能,您將不得不使用jdbc API代替。

希望它有幫助。