现在网上使用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;
执行成功!