Hibernate查询中的Oracle存储过程执行

时间:2017-09-19 13:31:13

标签: java spring hibernate stored-procedures

我有一个这样的程序:

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;

但是在获取query.list()时它会出错。实际上它在查询对象中返回null。 我该如何获得正确的结果列表。请建议我。

2 个答案:

答案 0 :(得分:1)

我真的不知道Oracle的存储过程,但是JPA设置了一个执行存储过程的接口,你应该读一下:Calling Stored procedure with Hibernate

这会照顾您使用INOUTIN OUT参数的情况,否则对于存储的函数,您将不得不使用jdbc API。

希望它有所帮助。

答案 1 :(得分:0)

我想我不可能使用query.list();方法 当我需要在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
    }
});

我希望它有用

安吉洛