2015-04-09 3 views
0

Я пытаюсь выполнить хранимую процедуру в oracle с помощью hibernate. Когда я вызываю процедуру из спящего режима, процесс вызывается, но после этого он показывает мне исключение, чтоjava.sql.SQLException: Не удается выполнить выборку в инструкции PLSQL: next

ERROR: Cannot perform fetch on a PLSQL statement: next 

Вот моя хранимая процедура в оракула:

create or replace PROCEDURE GETREGISTRATIONRECORDS 
(
    REGID IN NUMBER 
) 
AS 
MY_CURSER SYS_REFCURSOR; 
BEGIN 
OPEN MY_CURSER FOR 
SELECT * FROM REGISTRATION 
WHERE ID = REGID; 
END GETREGISTRATIONRECORDS; 

И в спящий режим я назвал эту процедуру, как показано ниже:

Registration.java

@NamedNativeQueries({ 
@NamedNativeQuery(
     name="callRegistrationProcedure", 
     query="call GETREGISTRATIONRECORDS(:regID)", 
     resultClass=Registration.class) 
}) 
@Entity 
public class Registration { 
...... 
} 

и в RegistrationDao.java я есть ниже функции

@SuppressWarnings("unchecked") 
public List<Registration> getFirstName(int id) 
{ 

    Query query = SQLFactory.getSession().getNamedQuery("callRegistrationProcedure").setParameter("regID", id); 
    List<Registration> result = query.list(); 
    for(int i=0; i<result.size(); i++){ 
     Registration stock = (Registration)result.get(i); 
     System.out.println(stock.getFirstName()); 
     System.out.println(stock.getLastName()); 

    } 

    return result; 
} 

Но когда я исполняю мое заявление я получаю следующее сообщение об ошибке:

Hibernate: call GETREGISTRATIONRECORDS(?) 
Apr 09, 2015 10:45:24 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
WARN: SQL Error: 17166, SQLState: null 
Apr 09, 2015 10:45:24 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions 
ERROR: Cannot perform fetch on a PLSQL statement: next 
Apr 09, 2015 10:45:24 AM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/SpringHibernateWebApplication] threw exception [Request processing failed; nested exception is org.hibernate.exception.GenericJDBCException: Cannot perform fetch on a PLSQL statement: next] with root cause 
java.sql.SQLException: Cannot perform fetch on a PLSQL statement: next 
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) 
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) 
at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:192) 

У меня есть прошли через эти ссылки, но я не нашел решение

java.sql.SQLException: Cannot perform fetch on a PLSQL statement: next. In Hibernate

Hibernate 4.2.18 Stored procedure call on oracle 11g with ojdbc6(11.2.0.2) gives Cannot perform fetch on a PLSQL statement: next

Так что, пожалуйста, помогите мне, чтобы получить решение.

ответ

0

Я получил solution.Following являются изменения, сделанные в коде выше

Хранятся Процедура в оракула:

create or replace PROCEDURE GETREGISTRATIONRECORDS 
(
    MY_CURSER OUT SYS_REFCURSOR, 
    REGID IN NUMBER 
) AS 
BEGIN 
OPEN MY_CURSER FOR 
SELECT * FROM REGISTRATION 
WHERE ID=REGID; 
END GETREGISTRATIONRECORDS; 

в Registration.java

@NamedNativeQuery(
    name="callRegistrationProcedure", 
    query="call GETREGISTRATIONRECORDS(?,:regID)", 
    callable=true, 
    resultClass=Registration.class) 
@Entity 
public class Registration { 
...... 
} 

Нет необходимости делать любые изменения в RegistrationDao.java Я получил желаемый результат. m база данных оракула.

Смежные вопросы