使用JPA / Hibernate的存储过程的结果

时间:2012-03-15 07:38:29

标签: sql-server-2008 hibernate stored-procedures jpa ejb

我正在尝试通过在EJB无状态会话bean中使用Hibernate来从存储过程中检索结果。

存储过程在MS SQL Server 2008上运行,并以整数作为参数并返回另一个整数。

我设法使用

调用该过程
Query q = em.createNativeQuery("name_of_my_procedure :param");
q.setParameter("param", sequence);
q.executeUpdate().

使用getResultList或getSingleResult而不是executeUpdate,总会导致一个有趣的异常。

在EJB 3.0 in Action中我发现了这个:

JPA不支持存储过程,您必须依赖持久性提供程序的专有功能

我发现了一些关于通过SQL连接使用CallableStatement的帖子,但这个解决方案看起来很不合适。

有没有办法使用Hibernate检索我生成的id?

谢谢。

佛瑞德。

2 个答案:

答案 0 :(得分:0)

不是您的问题的答案,但是FYI JPA 2.1支持(或将支持,在发布时)stored procedure API。提供此AFAIK的唯一JPA实现是DataNucleus JPA。

答案 1 :(得分:0)

最终,我使用另一个存储过程修复了它。

我创建了一个新的存储过程来调用另一个存储过程并将结果存储在临时表中。 我在这个临时表上映射了一个实体,现在我可以检索到我需要的信息。

我知道这不是最优雅的方式,但我不想将SQL连接代码与JPA代码混合使用。