HibernateTemplate提供这个HibernateCallback,就是为了满足这种使用了HibernateTemplate的情况下,仍然需要直接访问Session的需求而来的。它提供了在HibernateTemplate里面直接访问Session的能力。
这个就是我们要使用HibernateCallback的原因。
最后提醒一下楼主,HibernateCallback是一个对象,而不是一个方法...
我看了一下楼主的代码,好像你的代码既能得到HibernateTemplate,也能得到Session(this.getSession)。我个人认为这种代码一定有隐患。至少,在代码风格上是不好的。
我们使用HibernateTemplate,有一个很重要的原因就在于我们不想直接控制事务,不想直接去获取,打开Session,开始一个事务,处理异常,提交一个事务,最后关闭一个Session。我们自己只专注于业务,不想去作这些重复而繁琐的操作。我们把这些责任全部委托给了HibernateTemplate,然后使用声明式的配置来实现这样的功能。
如果我们通过类似getSession()这样的方法获得了Session,那就意味着我们放弃了上面所说的一切好处。所以,如果楼主的业务类如果在使用HibernateTemplate的同时,又可以直接得到Session(而不是通过HibernateCallback),那么我敢说楼主的代码一定有bug
上面说的声明式配置,指的是声明式的事务配置。
转载于:https://my.oschina.net/iqoFil/blog/221572