Java 在xml中使用hibernate调用Oracle存储过程

Java 在xml中使用hibernate调用Oracle存储过程,java,database,hibernate,stored-procedures,orm,Java,Database,Hibernate,Stored Procedures,Orm,我正试图修改一个Hibernate应用程序,使其包含Oracle中存储过程中的新select。我以前做过返回结果集的Oracle存储过程,所以我知道需要在那里做什么,但我对Hibernate不太熟悉,我很难弄清楚如何做,就像他们做其他调用一样 是的,我在这个主题上看到过几个堆栈溢出线程,但它们似乎使用了所有注释,而且这个应用程序在这一部分中不使用注释,所以我想让它尽可能接近现有的代码-它们是报告,所以甚至不由实际的表或实体表示 这就是我现在的处境: 结果集类: public class Pers

我正试图修改一个Hibernate应用程序,使其包含Oracle中存储过程中的新select。我以前做过返回结果集的Oracle存储过程,所以我知道需要在那里做什么,但我对Hibernate不太熟悉,我很难弄清楚如何做,就像他们做其他调用一样

是的,我在这个主题上看到过几个堆栈溢出线程,但它们似乎使用了所有注释,而且这个应用程序在这一部分中不使用注释,所以我想让它尽可能接近现有的代码-它们是报告,所以甚至不由实际的表或实体表示

这就是我现在的处境:

结果集类:

public class Person {

    private Long personId;
    private String firstName;
    private String lastName;

    // constructors omitted
    // getters & setters for properties omitted
}
道:

public List<Person> getPeopleInDept (Integer deptId) {
    return entityManager.createNamedQuery("getPeopleInDept", Person.class)
        .setParameter("deptId", deptId)
        .getResultList();
}
然后我得到一个不同的错误:

org.hibernate.QueryException:预期的位置参数计数:1,实际参数:[{call GET_PEOPLE_IN_DEPT(?,:deptId)}]

所以我的问题是,我需要做的最小修改是什么?我看到过这样一个例子:

<sql-query name="callStockStoreProcedure">
<return alias="stock" class="com.mkyong.common.Stock"/>
<![CDATA[CALL GetStocks(:stockCode)]]>
</sql-query>

但这似乎是Hibernate的旧版本,这些标记无效。我想我需要用新版本做一些类似的事情,不管它看起来像什么

他们使用的Hibernate版本是4.3,根据(这里您实际上使用的是传统API):

对于Oracle,以下规则适用:

A function must return a result set. The first parameter of a procedure must be an OUT that returns a result set. This is done by
在Oracle 9或10中使用SYS_REFCURSOR类型。在Oracle中,您需要 定义引用游标类型。有关更多信息,请参阅Oracle文献 信息

请尝试根据切换到。

(此处您实际上使用的是传统API):

对于Oracle,以下规则适用:

A function must return a result set. The first parameter of a procedure must be an OUT that returns a result set. This is done by
在Oracle 9或10中使用SYS_REFCURSOR类型。在Oracle中,您需要 定义引用游标类型。有关更多信息,请参阅Oracle文献 信息

尝试切换到新的模式

A function must return a result set. The first parameter of a procedure must be an OUT that returns a result set. This is done by