为了账号安全,请及时绑定邮箱和手机立即绑定

从Java / JPA调用存储过程

从Java / JPA调用存储过程

蛊毒传说 2019-08-06 17:11:04
从Java / JPA调用存储过程我正在编写一个简单的Web应用程序来调用存储过程并检索一些数据。它是一个非常简单的应用程序,它与客户端的数据库进行交互。我们传递员工ID和公司ID,存储过程将返回员工详细信息。Web应用程序无法更新/删除数据并且正在使用SQL Server。我正在Jboss AS中部署我的Web应用程序。我应该使用JPA来访问存储过程或CallableStatement。在这种情况下使用JPA的任何优点。另外,调用此存储过程的sql语句是什么。我之前从未使用过存储过程,而且我正在努力解决这个问题。谷歌没有多大帮助。这是存储过程:CREATE procedure getEmployeeDetails (@employeeId int, @companyId int)asbegin     select firstName,             lastName,             gender,             address      from employee et     where et.employeeId = @employeeId        and et.companyId = @companyIdend更新:对于其他任何使用JPA调用存储过程的问题。Query query = em.createNativeQuery("{call getEmployeeDetails(?,?)}",                                    EmployeeDetails.class)                                               .setParameter(1, employeeId)                                    .setParameter(2, companyId);List<EmployeeDetails> result = query.getResultList();我注意到的事情:参数名称对我不起作用,因此请尝试使用参数索引。更正sql语句{call sp_name(?,?)}而不是 call sp_name(?,?)如果存储过程返回结果集,即使您只知道一行,也getSingleResult不会工作传递resultSetMapping名称或结果类详细信息
查看完整描述

3 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

我正在Jboss AS中部署我的Web应用程序。我应该使用JPA来访问存储过程或CallableStatement。在这种情况下使用JPA的任何优点。

JPA并不真正支持它,但它是可行的。我仍然不会这样:

  • 使用JPA只是为了在一些bean中映射存储过程调用的结果实在是太过分了,

  • 特别是考虑到JPA不适合调用存储过程(语法非常冗长)。

因此,我宁愿考虑使用Spring支持JDBC数据访问,也可以考虑使用像MyBatis这样的数据映射器,或者考虑到应用程序的简单性,使用原始JDBC和CallableStatement。实际上,JDBC可能是我的选择。这是一个基本的启动示例:

CallableStatement cstmt = con.prepareCall("{call getEmployeeDetails(?, ?)}");cstmt.setInt("employeeId", 123);cstmt.setInt("companyId", 456);ResultSet rs = cstmt.executeQuery();

参考


查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 1352 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信