浏览 2654 次
锁定老帖子 主题:請教JPA怎麼調用Oracle存儲過程
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-09-08
最后修改:2009-09-08
我用的是Oracle數據庫,存儲過程如下: 引用 CREATE OR REPLACE procedure HTCHR.test_ is rowss number; BEGIN select count(*) into rowss from basechecksalary; END; / 然後調用的時候是這樣調用的: Query query = entityManager.createNativeQuery("{call test_()}"); query.getResultList(); // query.getSingleResult(); 但是不管用getResultList還是getSingleResult,都會報一個“Could not extract result set metadata”的異常: 引用 Caused by: org.hibernate.HibernateException: Could not extract result set metadata at org.hibernate.loader.custom.CustomLoader$Metadata.<init>(CustomLoader.java:524) at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:494) at org.hibernate.loader.Loader.getResultSet(Loader.java:1796) at org.hibernate.loader.Loader.doQuery(Loader.java:674) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236) at org.hibernate.loader.Loader.doList(Loader.java:2220) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104) at org.hibernate.loader.Loader.list(Loader.java:2099) at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289) at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695) at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142) at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152) at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:64) ... 82 more Caused by: java.sql.SQLException: ORA-00900: SQL 敘述句無效 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:283) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:278) at oracle.jdbc.driver.T4C8Odscrarr.receive(T4C8Odscrarr.java:214) at oracle.jdbc.driver.T4CPreparedStatement.doDescribe(T4CPreparedStatement.java:732) at oracle.jdbc.driver.OracleStatement.describe(OracleStatement.java:3462) at oracle.jdbc.driver.OracleResultSetMetaData.<init>(OracleResultSetMetaData.java:57) at oracle.jdbc.driver.OracleResultSetImpl.getMetaData(OracleResultSetImpl.java:138) at org.jboss.resource.adapter.jdbc.WrappedResultSet.getMetaData(WrappedResultSet.java:731) at org.hibernate.loader.custom.CustomLoader$Metadata.<init>(CustomLoader.java:521) ... 94 more 我又寫了另個insert的存儲過程,然後query.executeUpdate()是可以正確執行的 我有在一個地方看到,說 引用 在EJB3中你可以調用的存儲過程有兩種: 1.無返回值的存儲過程 2.返回值為ResultSet的存儲過程,EJB3不能調用以OUT參數返回值的存儲過程。 不知道是不是因為這個原因。 還有,我不知道我上面寫的那個存儲過程算不算“以OUT參數返回值的存儲過程” 請各位大大不吝賜教,小弟感激不盡,謝謝! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |