2013-01-02 2 views
2

Я написал хранимую процедуру, описанную ниже:Вызов StoredProcedure с Hibernate

create or replace 
PROCEDURE    SP_GET_NUMBER (p_cursor out sys_refcursor, departmentId in number, userId in number, documentTypeId in number) 
as 
regId integer; 
sqlScript varchar2(60); 
begin 
sqlScript:='select registrationnumber_seq.nextval from dual'; 
execute immediate sqlScript into regid; 
dbms_output.put_line('Nextval is: '||TO_CHAR(regid)); 
insert into roketsanuser.registrationnumbers 
(id, departmentid, documenttypeid, registrationnumber, registrationstatus, status, updatedate, updateuserid, version) 
values 
(regId, null, null, regid, 0, 0, sysdate, 0, 0); 
commit; 
open p_cursor for 
    select * 
     from registrationnumbers reg 
    where reg.id = regid; 
end; 

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

@Entity(name = "RegistrationNumber") 
@Table(name = "REGISTRATIONNUMBERS") 
@SequenceGenerator(name = "REGISTRATIONNUMBER_SEQ", sequenceName = "REGISTRATIONNUMBER_SEQ") 
@org.hibernate.annotations.NamedNativeQuery(name = "SP_GET_NUMBER", query = "{call ?= SP_GET_NUMBER(:departmentId, :userId, :documentTypeId)}", 
              callable = true, readOnly = true, resultClass = RegistrationNumber.class) 
@EntityListeners({ BaseEntityListener.class }) 
public class RegistrationNumber extends BaseEntity 

я называю запрос в моем Dao классе:

public RegistrationNumber getNumberForIncomingPaperworkByStoredProcedure(EntityManager manager, RegistrationNumber registrationNumber) 
{ 
    Session session = (Session)manager.getDelegate(); 
    org.hibernate.impl.SQLQueryImpl query = (SQLQueryImpl)session.getNamedQuery("SP_GET_NUMBER"); 

    query.setParameter("departmentId", ObjectUtil.isNotNull(registrationNumber.getDepartment()) ? registrationNumber.getDepartment().getId() : ""); 
    query.setParameter("userId", ObjectUtil.isNotNull(registrationNumber.getUser()) ? registrationNumber.getUser().getId() : ""); 
    query.setParameter("documentTypeId", ObjectUtil.isNotNull(registrationNumber.getDocumentType()) ? registrationNumber.getDocumentType().getId() : ""); 
    Collection list=query.list(); 
    return new RegistrationNumber(); 
} 

Но когда я выполнял запрос, произошел исключение: < 02-01-2013 10:04:24 часов EET> < 02-01-2013 10:04:27 o'clock EET> < 10: 04: 27,811 ОШИБКА [IncomingPaperworkMBean] EJB Исключение:; вложенное исключение: org.hibernate.exception.SQLGrammarException: невозможно выполнить запрос; вложенное исключение: org.hibernate.exception.SQLGrammarException: не удалось выполнить запрос>

Какая причина, пожалуйста, помогите мне?

ответ

0

С оракула Я использую Синтаксис запросов

query = "call SP_GET_NUMBER(?, :departmentId, :userId, :documentTypeId)", hints = {@QueryHint(name = "org.hibernate.callable", value = "true")}

и это работает для меня.

+0

Спасибо за ваш ответ. Но ничего не изменилось, к сожалению – webyildirim

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