2012-12-10 57 views
2

我有返回SYS_REFCURSOR是重度:org.hibernate.exception.GenericJDBCException:缺少IN或OUT參數的指數:: 1

CREATE OR REPLACE FUNCTION SCOTT.getemployees 
    RETURN SYS_REFCURSOR 
AS 
    o_cursor SYS_REFCURSOR; 
BEGIN 
    OPEN o_cursor FOR 
     SELECT EMPNO, 
      ENAME, 
      JOB, 
      MGR, 
      HIREDATE, 
      SAL, 
      COMM, 
      DEPTNO 
     FROM emp; 
    RETURN o_cursor; 
END; 
/

在我的實體類我已經聲明爲

一個Oracle函數
@Entity 
    @javax.persistence.NamedNativeQuery(name = "getEmp", 
    query = "{ ? = call getemployees }", resultClass = Employees.class, hints = { 
    @javax.persistence.QueryHint(name = "org.hibernate.callable", value = "true") }) 
    @Table(name = "EMPLOYEES") 
    public class Employees { 

在DAO我

@Inject 
    private SessionFactory sessionFactory; 

    @Override 
    public List<Employees> getEmployees() { 

     List query = new ArrayList<Employees>(); 
     try{ 
     query = sessionFactory.getCurrentSession() 
       .getNamedQuery("getEmp").list(); 
     } 
     catch(Exception e){ 
      System.out.println("exception "+e.getMessage()); 
      e.printStackTrace(); 
     } 
     return query; 
    } 

當我跑我得到的例外,可能是什麼原因FO這是什麼?

信息:休眠:{? =調用裝getEmployees} 重度:org.hibernate.exception.GenericJDBCException:缺少IN或OUT參數索引:: 1 在org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54) 在org.hibernate作爲.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) at org.hibernate.engine.jdbc.internal .proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129) 在org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)

+1

請停止使用JSF標記JPA問題。 JPA問題(其中您從'javax.persistence'或JPA實現特定包(如'org.hibernate')中檢索異常)與JSF無關。 JSF只是前端MVC框架。將此JPA代碼與普通JSP/Servlet,Spring MVC,Struts 2或Wicket,甚至Swing前端等一起使用時,您會遇到完全相同的問題。 – BalusC

回答

3

我已設法解決該問題。

定義爲數字的數據庫表列在實體類中聲明爲int。 我已將其更改爲Integer,問題得到解決。

private Integer deptNo; 

public Integer getDeptNo() { 
     return deptNo; 
    } 

    public void setDeptNo(Integer deptNo) { 
     this.deptNo = deptNo; 
    } 
相關問題