关于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的灵活访问方式是通过如下两个方法完成:
(1)Object execute(HibernateCallback action)
(2)List 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)这种回调的方式,封装了对异常的处理和对事务的一些处理。
如:
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{ // ......(省略) } } ?