現在網上使用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代碼。
//不要把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;
執行成功!