java – 如何调用使用Hibernate / JPA返回字符串的Oracle函数?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 如何调用使用Hibernate / JPA返回字符串的Oracle函数?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1671字,纯文字阅读大概需要3分钟。
内容图文
我想使用JPA调用Oracle函数.我在这个主题上找到了this thread.
但我的Oracle函数只返回一个字符串.不是某种实体的结果.我试过这样的事情:
@NamedNativeQuery(name = "myFuncCall",
resultSetMapping = "myResultSetMapping",
query = "{ ? = call schema.mypkg.somefunc(:id) }",
hints = { @javax.persistence.QueryHint(name = "org.hibernate.callable", value = "true") }
)
@SqlResultSetMapping(name = "myResultSetMapping",
columns = { @ColumnResult(name="somename") }
)
当我这样调用查询时
Query query = em.createNamedQuery("myFuncCall", String.class).setParameter("id", "42");
String res = (String) query.getSingleResult();
我明白了
Hibernate: { ? = call schema.somefunc(?) }
18:21:11.222 [main] WARN o.h.util.JDBCExceptionReporter - SQL Error: 6550, SQLState: 65000
18:21:11.222 [main] ERROR o.h.util.JDBCExceptionReporter - ORA-06550: Row 1, Column 13:
PLS-00382: This expression has the wrong type
ORA-06550: Row 1, Column 7:
PL/SQL: Statement ignored
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1389)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1317)
at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:307)
有任何想法吗?
解决方法:
我们最终使用了CallableStatement.它有效,但告诉我是否有更好的解决方案!
String funcCall = "{? = call schema.mypkg.somefunc(?)}";
Connection conn = ((SessionImpl)em.getDelegate()).connection();
CallableStatement stmt = conn.prepareCall(funcCall);
stmt.setInt(2, 42);
stmt.registerOutParameter(1, Types.CHAR);
stmt.executeUpdate();
String result = stmt.getString(1);
内容总结
以上是互联网集市为您收集整理的java – 如何调用使用Hibernate / JPA返回字符串的Oracle函数?全部内容,希望文章能够帮你解决java – 如何调用使用Hibernate / JPA返回字符串的Oracle函数?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。
来源:【匿名】