从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();
参考
JDBC文档:Java SE 6
添加回答
举报
0/150
提交
取消