关于Hibernate中HibernateCallback()的回调
来源:互联网 发布:深圳市云计算产业协会 编辑:程序博客网 时间:2024/04/30 12:18
public long getMaxMailId() {
long maxId = 0l;
maxId = ((Long) (this.getHibernateTemplate().executeFind(
new HibernateCallback() {
public Object doInHibernate(org.hibernate.Session session)
throws HibernateException, SQLException {
String sql = "select max(id) from Mail";
Query query = session.createQuery(sql);
return query.list();
}
}).get(0))).longValue();
return maxId;
}
为什么不直接用: this.getSession().createQuery(sql); 来查询呢?
我们使用HibernateTemplate,有一个很重要的原因就在于我们不想直接控制事务,不想直接去获取,打开Session,开始一个事务,处理异常,提交一个事务,最后关闭一个Session。我们自己只专注于业务,不想去作这些重复而繁琐的操作。我们把这些责任全部委托给了HibernateTemplate,然后使用声明式的配置来实现这样的功能。
如果我们通过类似getSession()这样的方法获得了Session,那就意味着我们放弃了上面所说的一切好处。所以,如果楼主的业务类如果在使用HibernateTemplate的同时,又可以直接得到Session(而不是通过HibernateCallback),那么我敢说楼主的代码一定有bug
你当然可以直接使用Query。但是问题是HibernateTemplate提供了相当多有用的辅助功能。我们想用它提供的辅助功能。但是HibernateTemplate包装了Hibernate的代码,使用了它以后不能直接访问到Session了,也就是说,我们无法通过Session对象得到Query了。所以,这种情况下我们当然无法直接用Query来查询了。
HibernateTemplate提供这个HibernateCallback,就是为了满足这种使用了HibernateTemplate的情况下,仍然需要直接访问Session的需求而来的。它提供了在HibernateTemplate里面直接访问Session的能力。
这个就是我们要使用HibernateCallback的原因。
最后提醒一下楼主,HibernateCallback是一个对象,而不是一个方法...
- 关于Hibernate中HibernateCallback()的回调
- 关于Hibernate中的HibernateCallback
- Hibernate的复杂用法HibernateCallback
- Hibernate的复杂用法HibernateCallback
- Hibernate的复杂用法HibernateCallback
- Hibernate的复杂用法HibernateCallback
- Hibernate的复杂用法HibernateCallback
- Hibernate的复杂用法HibernateCallback
- Hibernate的复杂用法HibernateCallback
- Hibernate的复杂用法HibernateCallback
- HibernateTemplate中HibernateCallback的事务
- HibernateTemplate中HibernateCallback的事务
- HibernateTemplate中HibernateCallback的事务
- HibernateTemplate中HibernateCallback的事务
- HibernateTemplate中HibernateCallback的事务
- HibernateTemplate中HibernateCallback的事务
- Spring中HibernateCallback的用法
- HibernateTemplate中HibernateCallback的事务
- 卡耐基先生果然英明
- windows如何在cmd命令行提示符中显示当前的时间
- 总结:ADO.NET在开发中的部分使用方法和技巧
- 发生错误 1069-(由于登录失败而无法启动服务。)
- 硬盘保养有门道
- 关于Hibernate中HibernateCallback()的回调
- 应用Hibernate3的DetachedCriteria实现分页查询
- 使用J-FTP上传下载(记录)
- 经典人生(1)
- C语言宏定义技巧
- vi使用手册(转载)
- SNMP
- jsp初级练习1
- 经典人生(2)