首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java.lang.IllegalAccessException:从Hibhernate调用存储过程时

java.lang.IllegalAccessException:从Hibhernate调用存储过程时
EN

Stack Overflow用户
提问于 2015-01-18 20:08:04
回答 2查看 945关注 0票数 1

我无法使用注释从hibernate调用SP。每次调用SP hibernate时,都会显示以下错误

代码语言:javascript
运行
复制
java.lang.IllegalAccessException: Class org.hibernate.dialect.Oracle9Dialect can not access a member of class oracle.jdbc.driver.OracleTypes with modifiers ""

调用SP所在的Dao类

代码语言:javascript
运行
复制
Query q = session.getCurrentSession().getNamedQuery("callStockStoreProcedure");

实体类

代码语言:javascript
运行
复制
@javax.persistence.NamedNativeQuery(name = "callStockStoreProcedure", query = "{ call TESTP(?) }", resultClass = Quotations.class, hints = {
@javax.persistence.QueryHint(name = "org.hibernate.callable", value = "true") })

和过程

代码语言:javascript
运行
复制
CREATE OR REPLACE PROCEDURE TESTP 
(
  p_cursor out sys_refcursor
) AS 

begin
   open p_cursor for SELECT * FROM MF_ITEM_TYPE;

END TESTP;
EN

Stack Overflow用户

发布于 2015-01-18 20:33:41

11g中已弃用oracle.jdbc.driver.OracleTypes包,并由oracle.jdbc.OracleTypes取代

一种解决方法是创建自定义Oracle方言,并以./core/src/main/java/org/hibernate/dialect/Oracle9Dialect.java为例进行更改

代码语言:javascript
运行
复制
Class types = ReflectHelper.classForName("oracle.jdbc.driver.OracleTypes");
oracletypes_cursor_value = types.getField("CURSOR").getInt(types.newInstance());

代码语言:javascript
运行
复制
Class types = ReflectHelper.classForName("oracle.jdbc.OracleTypes");
oracletypes_cursor_value = types.getField("CURSOR").getInt(null);

或者,如果可能,将oracle驱动程序版本降级。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28009479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档