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是一个对象,而不是一个方法...
源地址:http://hi.baidu.com/yxl1982/blog/item/fc8a0a08cbf275d762d9869b.html
其它参考:http://hi.baidu.com/xiaosa1984/blog/item/daae690afa29781394ca6b6b.html
分享到:
相关推荐
HibernateCallback 使用方法 HibernateCallback 是 Hibernate 框架中的一种 callback 机制,允许开发者在持久层访问时执行自定义操作。HibernateCallback 是 Spring 框架中与 Hibernate 整合的重要组件,通过它可以...
在上面的代码中,我们使用 `Session.createSQLQuery()` 方法创建了一个 `SQLQuery` 对象,然后使用 `addEntity()` 方法指定了查询结果的实体类型,最后使用 `list()` 方法执行查询并获取结果。 使用 ...
主要实现新闻发布,即时查询: public List<News> selectByPage(final PageBean pb) throws Exception { return template.execute(new HibernateCallback<List<News>>() { public List<News> doInHibernate...
Hibernate3.6.10用到的jiar antlr-2.7.6.jar,commons-collections-3.1, commons-logging-1.1.3, dom4j-1.6.1, ejb3-persistence, hibernate-jpa-2.0-api-1.0.1.Final, hibernate3, javassist-3.12.0.GA, jta...
通常,程序中采用实现HibernateCallback的匿名内部类来获取HibernateCallback的实例,方法doInHibernate()就是Spring执行的持久化操作。 24.3 Spring对Hibernate的简化 24.3.5 HibernateDaoSupport Spring为与...
对Spring框架中,HibernateTemplate的使用,底层dao中HibernateTemplate的使用以及HibernateCallBack调用等等
6.5 Spring整合Hibernate 6.6 Spring提供的DAO支持 6.5.2 管理Hibernate的...6.5.4 使用HibernateCallBack 6.5.6 使用IoC容器组装各种组件 6.5.7启动web容器读取xml配置文件 6.5.8了解继承自HibernateDaoSupport类DAO
弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,...
HibernateCallback HibernateDaoSupport HibernateDaoSupport HibernateInterceptor HibernateInterceptor HibernateJdbcException HibernateJdbcException HibernateJpaDialect HibernateJpaVendorAdapter ...
HibernateDaoSupport封装了HibernateTemplate,而HibernateTemplate封装了Hibernate所提供几乎所有的的数据操作方法,如execute(HibernateCallback action),load(Class entityClass, Serializable id),save(final ...