使用hibernate调用StoredProcess

使用hibernate调用StoredProcess,hibernate,stored-procedures,Hibernate,Stored Procedures,我在下面编写了一个存储过程: 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 registrationnumb

我在下面编写了一个存储过程:

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();
}
但执行查询时发生异常:


原因可能是什么,请帮助我?

对于oracle,我使用查询语法

query=“call SP\u GET\u NUMBER(?,:departmentId,:userId,:documentTypeId)”,提示={@QueryHint(name=“org.hibernate.callable”,value=“true”)}


这对我很有用。

谢谢你的回复。但不幸的是,一切都没有改变