我想知道是否可以使用具有结果集和多个out参数的Spring Data JPA来调用存储过程。
我发现同一https://github.com/spring-projects/spring-data-examples/issues/80
的Git问题如果解决了,有人可以提供Spring Boot的一个例子吗?
答案 0 :(得分:0)
我过去完成此操作的方法是将自定义行为添加到Spring Data JPA存储库(link)。在里面我得到EntityManager并使用java.sql.Connection和CallableStatement
编辑:添加高级示例代码。 Sample假设你正在使用Hibernate但是想法也应该适用于其他人
假设你有一个EntityRepository
public interface EntityRepositoryCustom {
Result storedProcCall(Input input);
}
public class EntityRepositoryImpl implements EntityRepositoryCustom {
@PersistenceContext
private EntityManager em;
@Override
public Result storedProcCall(Input input) {
final Result result = new Result();
Session session = getSession();
// instead of anonymous class you could move this out to a private static class that implement org.hibernate.jdbc.Work
session.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
CallableStatement cs = null;
try {
cs = connection.prepareCall("{call some_stored_proc(?, ?, ?, ?)}");
cs.setString(1, "");
cs.setString(2, "");
cs.registerOutParameter(3, Types.VARCHAR);
cs.registerOutParameter(4, Types.VARCHAR);
cs.execute();
// get value from output params and set fields on return object
result.setSomeField1(cs.getString(3));
result.setSomeField2(cs.getString(4));
cs.close();
} finally {
// close cs
}
}
});
return result;
}
private Session getSession() {
// get session from entitymanager. Assuming hibernate
return em.unwrap(org.hibernate.Session.class);
}
}