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