2

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

我编写了一个 sql 过程,它接受 5 个参数并返回一个在 MS SQL 工作室中运行良好的结果集

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
4

4 回答 4

7

您可以在休眠会话上使用可调用语句。

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

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

cs.execute();
于 2013-04-15T06:36:19.550 回答
6

创建一个 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,然后你可以遍历这些行。

于 2013-04-15T06:54:56.393 回答
3

我通过以下代码简单地解决了它......只需在CSV中传递参数。感谢您的帮助......

String queryString = "SlaGrid 245,2012,2013,1,12"

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

query.list();

完美工作:)

于 2013-04-20T11:28:35.240 回答
0

试试这个

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);
于 2013-04-15T06:39:04.500 回答