黑马程序员技术交流社区

标题: Spring集成hibernate出错了。。。。 [打印本页]

作者: youc3576@qq.com    时间: 2012-3-10 18:08
标题: Spring集成hibernate出错了。。。。
帮忙看看
谢谢
Exception in thread "main" java.lang.NullPointerException
        at cn.micblog.utils.HibernateUtil.currentSession(HibernateUtil.java:44)
        at cn.micblog.dao.BaseBO.currentSession(BaseBO.java:18)
        at cn.micblog.dao.BaseBO.save(BaseBO.java:48)
        at cn.micblog.dao.impl.MessageDaoImpl.save(MessageDaoImpl.java:16)
        at cn.micblog.TestDao.UserDAOTest.main(UserDAOTest.java:58)
我的hibernateutils类是这样的
package cn.micblog.utils;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

/**
* <p>
* 文件名: HibernateUtil.java
* </p>
* <p>
* 类职责: 线程范围内的Hibernate Session共享工具类
* </p>
* <p>
* CopyRight 2012 中国矿业大学银川学院
* </p>
* @author youc
* @version 1.0
* @date 2012-03-08
*/
public class HibernateUtil {

        private static Log log = LogFactory.getLog(HibernateUtil.class);

        private static SessionFactory sessionFactory;

        private static final ThreadLocal<Session> threadSession = new ThreadLocal<Session>();

        private static final ThreadLocal<Transaction> threadTransaction = new ThreadLocal<Transaction>();

        public HibernateUtil(SessionFactory coreSessionFactory) {
                super();
                sessionFactory = coreSessionFactory;
                log.info("=================HibernateUtil constructor......");
        }

        public static Session currentSession() throws HibernateException {
                Session s = threadSession.get();
                // Open a new Session, if this Thread has none yet
                if (s == null) {
                        s = sessionFactory.openSession();
                        log.info("###Opening new Session for this thread:");
                        threadSession.set(s);
                } else {
                        log.info("###Session was existed:");
                }
                return s;
        }

        public static void closeSession() throws HibernateException {
                Session s = threadSession.get();
                threadSession.remove();
                if (s != null) {
                        log.info("###Closing Session of this thread. ");
                        s.close();
                }
        }

        public static void beginTransaction() throws HibernateException {
                Transaction tx = threadTransaction.get();
                try {
                        if (tx == null) {
                                tx = currentSession().beginTransaction();
                                log.info("###Starting new database transaction in this thread:");
                                threadTransaction.set(tx);
                        } else {
                                log.info("###Tx was existed:");
                        }
                } catch (HibernateException ex) {
                        throw ex;
                }
        }

        public static void commitTransaction() throws HibernateException {
                Transaction tx = threadTransaction.get();
                try {
                        if (tx != null && !tx.wasCommitted() && !tx.wasRolledBack()) {
                                log.info("###Committing database transaction of this thread.");
                                tx.commit();
                        }
                        threadTransaction.remove();
                } catch (HibernateException ex) {
                        rollbackTransaction();
                        throw ex;
                }
        }

        public static void rollbackTransaction() throws HibernateException {
                Transaction tx = threadTransaction.get();
                try {
                        threadTransaction.set(null);
                        if (tx != null && !tx.wasCommitted() && !tx.wasRolledBack()) {
                                log.info("###Tyring to rollback database transaction of this thread.");
                                tx.rollback();
                        }
                } catch (HibernateException ex) {
                        throw ex;
                } finally {
                        closeSession();
                }
        }

}

作者: youc3576@qq.com    时间: 2012-3-10 18:09
请高手指点 我的session得不到啊:'(
作者: 马胜平    时间: 2012-3-10 18:17
一条注释都没有
作者: 刘雷冲    时间: 2012-3-10 18:27
  1. import org.hibernate.Session;
  2. import org.hibernate.SessionFactory;
  3. import org.hibernate.cfg.Configuration;


  4. public class HibernateSessionUtil {
  5.        
  6.         //private static Map<Thread, Session> sessionMap = new HashMap<Thread, Session>();
  7.         private static ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
  8.        
  9.         private static SessionFactory sf;
  10.        
  11.         static {
  12.                 sf = new Configuration().configure().buildSessionFactory();
  13.         }
  14.        
  15.         /**
  16.          * 打开一个新的session,并自动与当前线程关联
  17.          * @return
  18.          */
  19.         public  static Session openSession() {
  20.                 Session session = sf.openSession();
  21.                 //sessionMap.put(Thread.currentThread(), session);
  22.                 threadLocal.set(session);
  23.                 return session;
  24.         }
  25.         /**
  26.          * 获得当前线程关联的session,如果为空返回null
  27.          * @return
  28.          */
  29.         public static Session getCurrentSession() {
  30.                 Session session = threadLocal.get();
  31.                 return session;
  32.         }
  33.         /**
  34.          * 关闭当前线程关联的session,并自动移除先关联的session
  35.          */
  36.         public static void closeAndRomoveSession() {
  37.                 Session session = threadLocal.get();
  38.                 if(session != null) {
  39.                         threadLocal.remove();
  40.                         session.close();
  41.                 }
  42.                
  43.         }
  44.        
  45.        
  46. }
复制代码
注:这个是我以前用到的,不知何楼主的效果相同,需要结合hibernate配置和spring的内容,
主要是很长时间没有接触了,希望上面代码能给楼主以帮助。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2