两年前初涉hibernate时这样用的 
package com.util;import java.sql.SQLException;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import java.sql.Connection;
import org.apache.log4j.Logger;
import java.io.File;/**
 *
 * <p>Title: </p>
 *
 * <p> 用threandlocal 来使用hibernate的session  和transction: </p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: </p>
 *
 * @author 孙钰佳
 * @version 1.0
 */
public class HibernateUtil {
    private static final Logger logger = Logger.getLogger(HibernateUtil.class);
    private static final ThreadLocal sessionThread = new ThreadLocal();
    private static final ThreadLocal transactionThread = new ThreadLocal();
    private static SessionFactory sessionFactory = null;    public static boolean sessionFactoryInit(File file) {
        try {
            Configuration config = new Configuration();
            config.configure(file);
            sessionFactory = config.buildSessionFactory();
        } catch (HibernateException ex) {
            logger.error("没能拿到sessionFactory: ",
                         new RuntimeException(
                                 "Exception building SessionFactory: " +
                                 ex.getMessage(), ex));
            return false;
        }
        return true;
    }    /**
     * 获取当前线程使用的Session
     * @return Session
     * @throws HibernateException
     */
    public static Session getSession() throws
            HibernateException {
        Session s = (Session) sessionThread.get();
        if (s == null) {
            s = sessionFactory.openSession();
            sessionThread.set(s);
        } else {
            Connection conn = s.connection();
            try {
                if (conn == null || (conn.isClosed())) {
                    s.close();
                    s = sessionFactory.openSession();
                    sessionThread.set(s);
                }
            } catch (SQLException e) {
                logger.error("取得conn失败:" + e.getMessage(), e);
            }
        }
        return s;
    }    /**
     * 启动或者加入当前Session的Transaction
     *
     * @return Transaction
     * @throws HibernateException
     */
    public static Transaction transaction() throws HibernateException {
        Transaction transaction = (Transaction) transactionThread.get();
        if (transaction == null) {
            transaction = getSession().beginTransaction();
            transactionThread.set(transaction);
        }
        return transaction;
    }    /**
     * 提交当前Session的Transaction
     *
     * @throws HibernateException
     */
    public static void commitTransaction() throws HibernateException {
        Transaction transaction = (Transaction) transactionThread.get();
        transactionThread.set(null);
        if (transaction != null)
            transaction.commit();
    }    /**
     * 回滚当前Session的Transaction
     *
     * @throws HibernateException
     */
    public static void rollbackTransaction() throws HibernateException {
        Transaction tx = (Transaction) transactionThread.get();
        transactionThread.set(null);
        if (tx != null)
            tx.rollback();
    }    /**
     * 关闭当前线程使用的Session
     *
     * @throws HibernateException
     */
    public static void closeSession() throws HibernateException {
        Session session = (Session) sessionThread.get();
        if (session != null) {
            session.clear();
            session.close();
            sessionThread.set(null);
        }
    }
}
过滤器里面 try{
 }略
  finally {
            try {
                HibernateUtil.commitTransaction();
            } catch (HibernateException e) {
                HibernateUtil.rollbackTransaction();
            } finally {
                HibernateUtil.closeSession();
            }
        }