如何使用hibernate获取JDBC结果集。在一种情况下,我想调用一个存储过程,它执行一些计算并从多个表中选择一些列 所以在我的存储过程中,我有类似
的东西selct sum(c1) as TotalVal, avg(c2) as AverageVal from ....
所以,我想在我的java代码中获取这些列值并对其进行更多处理。 但是,我无法在java代码中获取过程调用的ResultSet。
有谁能让我知道怎么做?
我正在使用Hibernate4,所以无法找到session.connection()
方法。另外,我尝试使用doWork()
,但是如何从内部类Work
获取结果集
答案 0 :(得分:5)
您可以使用Session#doReturningWork(ReturningWork)
从JDBC调用中返回所需的结果:
session.beginTransaction();
ResultObject result = session.doReturningWork(new ReturningWork<ResultObject>() {
@Override
public ResultObject execute(Connection conn) throws SQLException {
// execute your SQL
// create and return result object
});
}
session.getTransaction().commit();
// work with ResultObject
您可以直接返回JDBC-ResultSet,但我建议将值存储在单独的对象(此处为:ResultObject)中,因为ResultSet与应保留在execute()
方法中的JDBC连接相关
答案 1 :(得分:1)
doWork允许您使用Hibernate提供的连接执行任何操作。所以这是一个例子:
private static class MyWork implements Work {
private List<Foo> result = new ArrayList<>();
@Override
public void execute(Connection connection) throws SQLException {
try (PreparedStatement stmt = connection.prepareStatement(...)) {
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
Foo foo = new Foo(rs.getString(0, rs.getInt(1));
result.add(foo);
}
}
}
public List<Foo> getResult() {
return result;
}
}
...
MyWork work = new MyWork();
session.doWork(work);
List<Foo> foos = myWork.getResult();
但你应该使用doReturningWork(),如Jack的回答所示。