我有一个这样的程序:
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。 我该如何获得正确的结果列表。请建议我。
答案 0 :(得分:1)
我真的不知道Oracle的存储过程,但是JPA设置了一个执行存储过程的接口,你应该读一下:Calling Stored procedure with Hibernate。
这会照顾您使用IN
,OUT
和IN 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
}
});
我希望它有用
安吉洛