现在网上使用JDBC的方式执行,大概情况如下(代码摘自http://blog.csdn.net/lanbosan/article/details/2429917):
Connection con = session.connect();
CallableStatement proc = null;
con = connectionPool.getConnection();
proc = con.prepareCall("{ call set_death_age(?, ?) }");
proc.setString(1, XXX);
proc.setInt(2, XXx);
...
proc.execute();
session.close();
而从Hibernate4.0开始,已经去除了Session.connection()的方法,取而代之的是:Session.doWork();
(代码摘自http://blog.sina.com.cn/s/blog_4550f3ca0101kbvt.html)
getSession.doWork(
new Work(){
public void excute(Connection con){
//
//不要把connection关闭
}
}
)
在这次项目中,JDBC的方法测试失败,所以我还是使用SQLQuery接口,代码如下:
(无返回值的存储过程)
Session session = getNewSession();
Transaction tx=session.beginTransaction();
SQLQuery query = session.createSQLQuery(sql);
result = query.executeUpdate();
tx.commit();
flush();
clear();
(有返回值的存储过程)
Session session = getSession();
SQLQuery query = session.createSQLQuery(sql).addEntity(bean.getClass());
List list =query.list();
return list;
执行成功!
本文探讨了从Hibernate4.0开始,通过Session.doWork()方法替代Session.connection()进行数据库操作的优化,同时提供了针对有无返回值的存储过程的JDBC代码示例。通过比较不同方法的实现,展示了如何更高效地执行数据库任务。

184

被折叠的 条评论
为什么被折叠?



