Hibernate存储过程使用方法—权限

Hibernate规定了一些存储过程声明和调用方法,但是约束太多,需要调用任意的存储过程,例如,从一个表中查到存储过程名,然后调用它,所以需要直接使用JDBC API,参照hibernate中调用存储过程hibernate中调用存储过程,调用

 CallableStatement stmt = session.connection().prepareCall("{call procName}");
 stmt.execute();

可以执行一个没有参数传递的存储过程。但是一直遇到Exception,如下:

 com.mysql.jdbc.StringUtils.indexOfIgnoreCaseRespectQuotes(StringUtils.java:948)
 com.mysql.jdbc.DatabaseMetaData.getCallStmtParameterTypes(DatabaseMetaData.java:1256)
 com.mysql.jdbc.DatabaseMetaData.getProcedureColumns(DatabaseMetaData.java:3640)
 com.mysql.jdbc.CallableStatement.determineParameterTypes(CallableStatement.java:506)
 com.mysql.jdbc.CallableStatement.<init>(CallableStatement.java:401)
 com.mysql.jdbc.Connection.parseCallableStatement(Connection.java:4072)
 com.mysql.jdbc.Connection.prepareCall(Connection.java:4146)
 com.mysql.jdbc.Connection.prepareCall(Connection.java:4120)
 org.apache.commons.dbcp.DelegatingConnection.prepareCall(DelegatingConnection.java:275)
 org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.prepareCall(PoolingDataSource.java:292)
 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 java.lang.reflect.Method.invoke(Method.java:597)
 org.hibernate.jdbc.BorrowedConnectionProxy.invoke(BorrowedConnectionProxy.java:50)
 $Proxy9.prepareCall(Unknown Source)


查了无数资料,正在一筹莫展之际,看到文章linux下安装mysql,jdk,tomcat以及存储过程提到权限问题,才想起来我用root用户创建的存储过程,而用某普通用户调用之。终于解决了。