2017-09-19 70 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代替。

希望它有帮助。