如何使用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);
- Spring引导JPA – JSON没有嵌套对象与OneToMany关系
- 如何在hibernate中保留实体期间validation实体上的约束
- 如何使用hibernate.properties文件而不是hibernate.cfg.xml
- 在使用FlushMode.AUTO调用session.close()时,Hibernate会刷新我更新的持久对象吗?
- NoSuchMethodError:javax.persistence.JoinColumn.foreignKey()
- Spring + Hibernate + JPA
- 如何使用UUID作为Hibernate实体的主键?
- 您是否需要数据库事务来读取数据?
- Hibernate对Web应用程序更安全吗?