[英]Call Oracle Stored Procedure Using createNativeQuery
我需要使用JPA调用存储过程并找到这篇文章:
http://www.oracle.com/technology/pub/articles/vasiliev-jpql.html
这解释了如何使用EntityManager.createNativeQuery。 但是,该示例实际上调用了一个具有return参数的函数。 我已经尝试搜索一个调用没有返回但仍无法找到任何内容的存储过程的示例。
我可以使用createNativeQuery来调用过程吗? 或者是否需要将过程修改为函数(可能返回成功/失败结果)?
谢谢!
来自JPA维基:
1.4存储过程
JPA对存储过程没有任何直接支持。 可以通过使用本机查询在JPA中执行某些类型的存储过程。 JPA中的本机查询允许任何不返回任何内容的SQL,或返回要执行的数据库结果集。 执行存储过程的语法取决于数据库。 JPA不支持使用OUTPUT或INOUT参数的存储过程。 某些数据库(如DB2,Sybase和SQL Server)允许存储过程返回结果集。 Oracle不允许返回结果集,只返回OUTPUT参数,但确实定义了可以作为OUTPUT参数返回的CURSOR类型。 Oracle还支持存储函数,可以返回单个值。 通常可以通过从Oracle DUAL表中选择函数值,使用本机SQL查询来执行存储函数。
一些JPA提供程序扩展了对存储过程的支持,一些还支持使用存储过程或自定义SQL覆盖实体的任何CRUD操作。 一些JPA提供程序支持CURSOR OUTPUT参数。
在Oracle上执行存储过程的示例
EntityManager em = getEntityManager(); Query query = em.createNativeQuery("BEGIN VALIDATE_EMP(P_EMP_ID=>?); END;"); query.setParameter(1, empId); query.executeUpdate();
所以我的建议是:
如果可能,您可能需要以这种方式包装过程调用:
em.createNativeQuery("BEGIN yourprocedure; END;")
通过程序获得返回值可能会有问题。 传递它们应该很容易。
如前所述,JPA规范尚不支持StoredProcedures,但EclipseLink JPA提供程序执行:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.