关于HibernateCallBack的理解

看了网上那么多关于hibernateCallBack的解释,我总结了一下:说白了,hibernateCallBack主要是封装了对异常和事物的处理,以及完成了需要在执行某一方法时,同时执行另外一个方法,有点类似触发器。比如:你获取到某一大数量的结果集,你想在返回结果集得同时,就将他们分页显示,只是就可以采用hibernateCallBack回调机制来完成这一操作。

API:

http://static.springsource.org/spring/docs/1.2.x/api/org/springframework/orm/hibernate3/HibernateCallback.html

BlogJava对hibernateCallBack的解释,蛮好的

http://www.blogjava.net/caixuetao/articles/113433.html

下面的是从网上淘来的一点解释,助理解

HibernateTemplate还提供一种更加灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。
HibernateTemplate
的灵活访问方式是通过如下两个方法完成:

1Object execute(HibernateCallback action)

2List execute(HibernateCallback action)

这两个方法都需要一个HibernateCallback的实例,HibernateCallback实例可在任何有效的Hibernate数据访问中使用。
程序开发者通过HibernateCallback,可以完全使用Hibernate灵活的方式来访问数据库,解决Spring封装Hibernate后灵活性不足的缺陷。
HibernateCallback
是一个接口,该接口只有一个方法doInHibernate(org.hibernate.Session session)
该方法只有一个参数Session。通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,
方法doInHibernate的方法体就是Spring执行的持久化操作。

还有的就是采用:
HibernateTemplate.execute(HibernateCallback action)
这种回调的方式,封装了对异常的处理和对事务的一些处理。
如:

Java代码

public Object execute(HibernateCallback action, boolean exposeNativeSession) throws DataAccessException { 
  // ......(省略) 
  // ...... 
    try { 
        previousFlushMode = applyFlushMode(session, existingTransaction); 
        enableFilters(session); 
        Session sessionToExpose = (exposeNativeSession ? session : createSessionProxy(session)); 
        Object result = action.doInHibernate(sessionToExpose); 
        flushIfNecessary(session, existingTransaction); 
        return result;  
    }catch (HibernateException ex){ 
    //省略 
    } 
    }catch (SQLException ex){ 
    // ......(省略) 
    }catch (RuntimeException ex) { 
    // ......(省略) 
    }finally{ 
    // ......(省略) 
   } 
}
 
 

猜你喜欢

转载自6tao.iteye.com/blog/1109430