Hibernate4.x執行mysql的存儲過程

現在網上使用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;

執行成功!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章