hibernate3学习笔记(六) Session管理 - 编程入门网
作者 佚名技术
来源 NET编程
浏览
发布时间 2012-06-20
hibernate3学习笔记(六) Session管理时间:2011-02-02请注意,在hibernate中SessionFactory是被设计成线程安全(Thread-safe)的,遗憾的是,Session却线程不安全。 这就意味着:有可能多个线程共享并操作同一个Session从而很容易使数据混乱。 解决的办法如下:(其实hibernate的文档中早已经提过了) 新建HibernateUtil类: 1.import org.apache.commons.logging.Log;2.import org.apache.commons.logging.LogFactory;3.import org.hibernate.*;4.import org.hibernate.cfg.*;5.6.public class HibernateUtil {7. private static Log log = LogFactory.getLog(HibernateUtil.class);8. private static final SessionFactory sessionFactory;9. 10. static {11. try {12. // Create the SessionFactory 13. sessionFactory = new Configuration().configure()14. .buildSessionFactory();15. } catch (Throwable ex) {16. // Make sure you log the exception, as it might be swallowed 17. log.error("Initial SessionFactory creation failed.", ex);18. throw new ExceptionInInitializerError(ex);19. }20. }21. 22. public static final ThreadLocal session = new ThreadLocal();23. 24. public static Session currentSession() {25. Session s = (Session) session.get();26. 27. // Open a new Session, if this Thread has none yet 28. if (s == null) {29. s = sessionFactory.openSession();30. session.set(s);31. }32. 33. return s;34. }35. 36. public static void closeSession() {37. Session s = (Session) session.get();38. 39. if (s != null) {40. s.close();41. }42. 43. session.set(null);44. }45.} hibernate3学习笔记(六) Session管理(2)时间:2011-02-02这样,在程序中可这样调用: 1.Session session = HibernateUtil.currentSession();2.User user = (User) session.load(User.class, new Integer(1));3.System.out.println(user.getName());4.HibernateUtil.closeSession(); 在web应用中,可以借由Filter来进行session管理。在需要session的时候开启session,在request结束之后关闭session。 HibernateSessionUtil.java 1.import java.io.Serializable;2.3.import net.sf.hibernate.HibernateException;4.import net.sf.hibernate.Session;5.import net.sf.hibernate.SessionFactory;6.import net.sf.hibernate.Transaction;7. 8.public class HibernateSessionUtil implements Serializable9.{10. public static final ThreadLocal tLocalsess = new ThreadLocal();11. 12. public static final ThreadLocal tLocaltx = new ThreadLocal();13. 14. /*15. * getting the thread-safe session for using16. */17. public static Session currentSession(){18. Session session = (Session) tLocalsess.get();19. 20. //open a new one, if none can be found. 21. try{22. if (session == null){23. session = openSession();24. tLocalsess.set(session);25. }26. }catch (HibernateException e){27. throw new InfrastructureException(e);28. }29. |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于hibernate3学习笔记(六) Session管理 - 编程入门网的所有评论