Hibernate:doInHibernate

来源:互联网 发布:软件汉化教程 编辑:程序博客网 时间:2024/05/29 15:08

===HibernateCallback_doInHibernate
1.可以获取到Session
2.spring管理session,管理事务

链接:http://silentjesse.iteye.com/blog/965013 
在spring中提供了两种方法来管理session 
第一种是用户直接getSession(),在这种情况下请注意了,如果你没有配置事务的话,请注意关闭session 
第二种是用spring的HibernateTemplate进行管理,除了通常的crud,HibernateTemplate都为我们封装好了,直接调用就行了,但如果想自己封装的话,就得调用HibernateTemplate中的方法execute(HibernateCallBack action) 
调用这个方法时要注意重写HibernateCallBack中的方法doInHibernate(Session session),在这种情况下很简单..session的开关,不用你来管,直接由hibernate事务管理器进行管理了 

链接:http://blog.csdn.net/dingherry/article/details/7056560
在Spring的框架中,HibernateTemplate包装了Hibernate的session操作,帮我们管理事务;
但是使用HibernateTemplate后,就不能直接访问到Session了。
如果我们通过类似getSession()这样的方法获得了Session,那我们又得自己去管理事务。

不过,如果我们非得使用session来完成业务而又不想去管事务上的事,Spring,她依然可以帮我们完成这种有点BT的需求。
HibernateTemplate提供HibernateCallback,就是为了满足这种使用了HibernateTemplate的情况下,仍然需要直接访问Session的需求而来的。它提供了在HibernateTemplate里面直接访问Session的能力,程序员不必人为的管理session对象, 这个就是使用HibernateCallback的原因。

链接:http://www.blogjava.net/rain1102/articles/170638.html
HibernateTemplate还提供一种更加灵活的方式来操作数据库,通过这种方式可以完全使用Hibernate的操作方式。HibernateTemplate的灵活访问方式是通过如下两个方法完成:
      Object execute(HibernateCallback action)
      List execute(HibernateCallback action)
HibernateCallback是一个接口,该接口只有一个方法doInHibernate(org.hibernate.Session session),该方法只有一个参数Session。 
注意:方法doInHibernate方法内可以访问Session,该Session对象是绑定到该线程的Session实例。该方法内的持久层操作,与不使用Spring时的持久层操作完全相同。这保证对于复杂的持久层访问,依然可以使用Hibernate的访问方式。

例子:

// 批量保存文件数据
userDao.getHibernateTemplate().execute(new HibernateCallback<Object>() {


public Object doInHibernate(Session se) throws HibernateException,
SQLException {
se.beginTransaction();
se.save(pt);
for (PtRecord sf : recordList) {
se.save(sf);
}
se.getTransaction().commit();
se.flush();
se.clear();
return null;
}


});

链接: 
http://wing90.blog.51cto.com/8222863/1337618
http://yeyhan.blog.163.com/blog/static/44179333201022942856795/
http://blog.csdn.net/woisnong/article/details/7423914
http://www.blogjava.net/caixuetao/articles/113433.html 

原创粉丝点击