我无法使用注释从hibernate调用SP。每次调用SP hibernate时,都会显示以下错误
java.lang.IllegalAccessException: Class org.hibernate.dialect.Oracle9Dialect can not access a member of class oracle.jdbc.driver.OracleTypes with modifiers ""调用SP所在的Dao类
Query q = session.getCurrentSession().getNamedQuery("callStockStoreProcedure");实体类
@javax.persistence.NamedNativeQuery(name = "callStockStoreProcedure", query = "{ call TESTP(?) }", resultClass = Quotations.class, hints = {
@javax.persistence.QueryHint(name = "org.hibernate.callable", value = "true") })和过程
CREATE OR REPLACE PROCEDURE TESTP
(
p_cursor out sys_refcursor
) AS
begin
open p_cursor for SELECT * FROM MF_ITEM_TYPE;
END TESTP;发布于 2015-01-18 20:33:41
11g中已弃用oracle.jdbc.driver.OracleTypes包,并由oracle.jdbc.OracleTypes取代
一种解决方法是创建自定义Oracle方言,并以./core/src/main/java/org/hibernate/dialect/Oracle9Dialect.java为例进行更改
Class types = ReflectHelper.classForName("oracle.jdbc.driver.OracleTypes");
oracletypes_cursor_value = types.getField("CURSOR").getInt(types.newInstance());至
Class types = ReflectHelper.classForName("oracle.jdbc.OracleTypes");
oracletypes_cursor_value = types.getField("CURSOR").getInt(null);或者,如果可能,将oracle驱动程序版本降级。
https://stackoverflow.com/questions/28009479
复制相似问题