我一直试图使用Hibernate执行Oracle存储过程。这不是用于生产,而是用于我正在研究的Java源代码解析项目。简单地说,我不能从Oracle存储过程返回值。
我搜索并阅读了SO、Hibernate Community/Documentations(原生SQL章节)链接中的所有相关链接,并尝试了这些建议,但不知何故无法让它们发挥作用。以下是我的来源--我只包括相关的部分。
@NamedNativeQuery(
name = "getLoginDet",
query = "call GET_LOGIN_DET(?,:userId)",
resultClass = Login.class)
@Entity
@Table(name = "T_LOGIN_DET")
public class Login {
create or replace PROCEDURE GET_LOGIN_DET(listLogin OUT SYS_REFCURSOR,userId IN VARCHAR2)
AS
BEGIN
OPEN listLogin FOR
SELECT *
FROM T_LOGIN_DET
WHERE USER_ID = userId;
END GET_LOGIN_DET;
java prettyprint-override">Session session = sessionFactory.openSession();
List results = session.getNamedQuery("getLoginDet").setParameter("userId", u.getUserId()).list();
<bean id="mysessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configurationClass">
<value>org.hibernate.cfg.AnnotationConfiguration</value>
</property>
<property name="annotatedClasses">
<list>
<value>com.cogn.gto.sea.employee.entity.Employee</value>
<value>com.cogn.gto.sea.employee.entity.Department</value>
<value>com.cogn.gto.sea.login.entity.User</value>
<value>com.cogn.gto.sea.login.entity.Login</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
<!-- <prop key="hibernate.hbm2ddl.auto">update</prop> -->
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
Expected positional parameter count: 1, actual parameters: [] [{call GET_LOGIN_DET(?,:userId)}]
我认为您错误地声明了对存储过程的调用(缺少花括号),请尝试以下操作:
@NamedNativeQuery(
name = "getLoginDet",
query = "{call GET_LOGIN_DET(?,:userId)}",
resultClass = Login.class
hints = {@QueryHint(name = "org.hibernate.callable", value = "true")})
@Entity
@Table(name = "T_LOGIN_DET")
public class Login {
问题内容: 简而言之:我正在尝试在Entity Framework中运行Oracle存储过程(我知道这听起来很奇怪,但是在一般应用程序中使用Entity Framework,但是由于修改密钥的限制,EF无法处理此特定命令。值)。 过程具有一些参数(仅IN),并更新表中的值。我通过运行测试了它: 它工作正常。 我的参数定义如下: 我的查询是: 我正在尝试从C#代码执行它。即通过运行: 我收到错误OR
我刚开始冬眠。我试图通过Hibernate调用oracle存储过程。我可以按照一些步骤通过Hibernate调用过程吗。 提前谢了。
下面是我的Oracle存储过程, 我得到以下异常:hibernate:{CALL REPORT_HIBERNATE(?)}org.hibernate.exception.GenericJDBcException:无法执行查询...并且由:java.sql.sqlException:无效的列索引引起 Plz让我知道在Spring中我将如何使用Hibernate注释调用这个存储过程??
问题内容: 我主要是oracle新手,所以如果这是一个愚蠢的问题,请原谅我… 我有一个名为“ CODE”的架构,该架构具有一个执行任意SQL的存储proc(目前,请忽略与此相关的潜在安全问题)。传入的SQL将选择数据;但是所有数据都驻留在架构A,B或C中- 但是SQL一次只能选择一个架构。 例如:类型A的用户创建字符串’SELECT * FROM A.USERTABLE’-类型B的用户创建字符串’
我通过Hibernate调用了一个带有OUT参数的存储过程,得到了以下错误: 我的存储过程: Hibernate映射: 我按如下方式调用了存储过程: 有人能解释一下这段代码有什么问题吗?