如何使用Session Factory从Java Hibernate执行sql存储过程?

Kab*_*n S 2 java sql spring stored-procedures hibernate

我无法使用会话工厂从java hibernate调用我的存储过程

我编写了一个sql过程,它接受5个参数并返回一个在MS SQL studio中正常工作的结果集

EXEC SlaGrid @appID=245,@fromYear=2012,@toYear=2013,@fromMon=1,@toMon=12   --- sql

EXEC SlaGrid @applID=:applID,@fromYear=:fromYear,@toYear=:toYear,@fromMon=:fromMon,@toMon=:toMon  --hibernate
Run Code Online (Sandbox Code Playgroud)

我正在设置上述查询的参数

String queryString = "EXEC SlaGrid @applID=:applID,@fromYear=:fromYear,@toYear=:toYear,@fromMon=:fromMon,@toMon=:toMon"

Query query = sessionFactory.getCurrentSession().createSQLQuery(queryString);

//set query parameters here

query.list()    --- giving sql grammer exception
Run Code Online (Sandbox Code Playgroud)

mag*_*ggu 7

您可以在hibernate会话上使用可调用语句.

Connection con = getSessionFactory().getCurrentSession().connection();  

/**
* Amend to include your parameters and proc
*/          
CallableStatement cs = con.prepareCall( "{ call myprocedure }");

cs.execute();
Run Code Online (Sandbox Code Playgroud)


Azu*_*zuu 5

然后创建一个SessionFactory并打开一个会话

CallableStatement callableStatement = session.connection().prepareCall("call GetMarketDataCDS(?,?)");
callableStatement.setString(1,"JPM");
callableStatement.registerOutParameter(1, OracleTypes.CURSOR);
callableStatement.execute();
ResultSet resultSet=(ResultSet) callableStatement.getObject(1);
Run Code Online (Sandbox Code Playgroud)

这里我使用的是oracle,我的第一个参数是IN参数,第二个是OUT,它只是返回多行的结果集.然后在最后一行,我们获得带有所有行的ResultSet,然后您可以遍历行.