引用spring 2.0文档~~~~~~
http://www.redsaga.com/spring_ref/2.0/html/orm.html#d0e14411
12.2.3.  HibernateTemplate 
对于特定的数据访问对象或业务对象的方法来说,基本的模板编程模型看起来像下面所示的代码那样。 对于这些外部对象来说,没有任何实现特定接口的要求,仅仅要求提供一个Hibernate SessionFactory。 HibernateTemplate 会确保当前Hibernate的 Session 对象的正确打开和关闭,并直接参与到事务管理中去。 Template实例不仅是线程安全的,同时它也是可重用的。因而他们可以作为外部对象的实例变量而被持有。对于那些简单的诸如find、load、saveOrUpdate或者delete操作的调用,HibernateTemplate 提供可选择的快捷函数来替换这种回调的实现。

解决方案 »

  1.   

    public class ProductDaoImpl implements ProductDao {    private SessionFactory sessionFactory;    public void setSessionFactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
        }    public Collection loadProductsByCategory(final String category) throws DataAccessException {
            HibernateTemplate ht = new HibernateTemplate(this.sessionFactory);
            return (Collection) ht.execute(new HibernateCallback() {
                public Object doInHibernate(Session session) throws HibernateException {
                    Query query = session.createQuery(
                        "from test.Product product where product.category=?");
                    query.setString(0, category);
                    return query.list();
                }
            });
        }
    }