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

我无法使用会话工厂从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 

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

 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 

您可以在hibernate会话中使用可调用语句 。

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

然后创建一个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); 

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

我只是通过以下代码解决了它……只需将参数传递给CSV.谢谢帮助人员..

 String queryString = "SlaGrid 245,2012,2013,1,12" Query query = sessionFactory.getCurrentSession().createSQLQuery(queryString); query.list(); 

作品完美:)

尝试这个

 Query query = sessionFactory.getCurrentSession().createSQLQuery( "CALL SlaGrid(:appID, :fromYear, :toYear, :fromMon, :toMon)") .setParameter("appID", 245) .setParameter("fromYear", 2012) .setParameter("toYear", 2013) .setParameter("fromMon", 1) .setParameter("toMon", 12);