与Hibernate中的createSQLQuery和getNamedQuery相同的存储过程给出了不同的行为

时间:2016-02-09 05:10:51

标签: java sql-server hibernate

我从下面的代码调用名为PRC_HB_EMP_SP1的存储过程,它给出了预期的输出。

Session session = HibernateUtil.getSessionFactory().openSession();
                Query query = session.getNamedQuery("PRC_HB_EMP_SP1");
                query.setParameter("IN_EMPID",empId);

但是,当我用下面的代码调用相同的程序时

Query query1 = session.createSQLQuery("CALL PRC_HB_EMP_SP1(?,:IN_EMPID)").addEntity(Employee.class);
                query1.setParameter("IN_EMPID",empId);

它给我一个像

这样的错误
 org.hibernate.QueryException: Expected positional parameter count: 1, actual parameters: [] [CALL PRC_HB_EMP_SP1(?,:IN_EMPID)]

这背后的原因是什么?我在网上搜索,我知道这是paramateres的问题,但这个sp有两个参数。第一个是输出参数,第二个是输入参数

create or replace PROCEDURE PRC_HB_EMP_SP1
(
  Out_value OUT SYS_REFCURSOR,
  IN_EMPID  NUMBER
)
AS

BEGIN

   open Out_value for
    SELECT EMPID,EMPNAME,ADDRESS,SALARY,EMPAGE
            FROM EMPLOYEE
    WHERE  EMPLOYEE.EMPID = IN_EMPID;

END PRC_HB_EMP_SP1;

1 个答案:

答案 0 :(得分:0)

我经历了同样的情况。我尝试了另一种方式......

而是在存储过程中使用out参数,修改如下所示的过程

create or replace PROCEDURE PRC_HB_EMP_SP1
(
     IN_EMPID  NUMBER
)
AS

BEGIN

   open Out_value for
    SELECT EMPID,EMPNAME,ADDRESS,SALARY,EMPAGE
            FROM EMPLOYEE
    WHERE  EMPLOYEE.EMPID = IN_EMPID;

select Out_value;
END PRC_HB_EMP_SP1;

现在,

Query query1 = session.createSQLQuery("CALL PRC_HB_EMP_SP1(:IN_EMPID)").addEntity(Employee.class);
                query1.setParameter("IN_EMPID",empId);

并使用

获取您的值

列表res = query1.list();                 的System.out.println( “结果” + res.get(0));