Hibernate Session是由SessionFactory所创建,SessionFactory是执行绪安全的(Thread-Safe),您可以让多个执行绪同时存取SessionFactory而不会有数据共享的问题。

本文就Hibernate Session的入门加以简略介绍。

轻松了解Hibernate Session办理入门(hibernate session方法)  Hibernate Session 第1张

Hibernate Session是Hibernate运作的中心,目标的生命周期、业务的办理、数据库的存取,都与 Session休戚相关,就如同在编写JDBC时需关怀Connection的办理,以有用的办法创立、运用与收回Connection,以削减资源的耗费,添加体系履行效能相同,有用的Session办理,也是Hibernate运用时需重视的焦点。

Hibernate Session是由SessionFactory所创立,SessionFactory是履行绪安全的(Thread-Safe),您能够让多个履行绪一起存取SessionFactory而不会有数据同享的问题,但是Session则不是规划为履行绪安全的,所以企图让多个履行绪同享一个 Session,将会产生数据同享而产生紊乱的问题。

在Hibernate参考手册中的***章快速入门中,演示了一个HibernateUtil,它运用了ThreadLocal类别来树立一个 Session办理的辅佐类,这是Hibernate Session办理一个广为运用的解决方案,ThreadLocal是Thread- Specific Storage形式的一个运作实例,您能够在下面这篇文章中了解Thread-Specific Storage形式:
designpattern:Thread-Specific Storage

因为Thread-Specific Stroage形式能够有用阻隔履行绪所运用的数据,所以避开Session的多履行绪之间的数据同享问题,以下列出Hibernate参考手册中的HibernateUtil类:

  1. HibernateUtil.java
  2. importnet.sf.hibernate.*;
  3. importnet.sf.hibernate.cfg.*;
  4. publicclassHibernateUtil{
  5. privatestaticLoglog=LogFactory.getLog(HibernateUtil.class);
  6. privatestaticfinalSessionFactorysessionFactory;
  7. static{
  8. try{
  9. //CreatetheSessionFactory
  10. sessionFactory=newConfiguration().configure().buildSessionFactory();
  11. }catch(Throwableex){
  12. log.error("InitialSessionFactorycreationfailed.",ex);
  13. thrownewExceptionInInitializerError(ex);
  14. }
  15. }
  16. publicstaticfinalThreadLocalsession=newThreadLocal();
  17. publicstaticSessioncurrentSession()throwsHibernateException{
  18. Sessions=(Session)session.get();
  19. //OpenanewSession,ifthisThreadhasnoneyet
  20. if(s==null){
  21. s=sessionFactory.openSession();
  22. session.set(s);
  23. }
  24. returns;
  25. }
  26. publicstaticvoidcloseSession()throwsHibernateException{
  27. Sessions=(Session)session.get();
  28. session.set(null);
  29. if(s!=null)
  30. s.close();
  31. }
  32. }

在同一个履行绪中,Session被暂存下来了,但无须忧虑数据库衔接Connection继续占用问题,Hibernate会在真实需求数据库操作时才(从衔接池中)获得Connection。

在Web运用程序中,咱们能够藉助Filter来进行Session办理,在需求的时分敞开Session,并在Request完毕之后封闭Session,这个部份,在JavaWorld的Wiki上有个很好的比如:
http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=805
另外在Hibernate中文网上也有一篇介绍:
http://www.Hibernate.org.cn/80.html


【修改引荐】

  1. Hibernate功能优化全面剖析
  2. 对Hibernate中get()与load()不同点剖析
  3. Struts-Spring-Hibernate事例
  4. 简述Hibernate装备衔接池
  5. 对Hibernate中get()与load()不同点剖析
转载请说明出处
知优网 » 轻松了解Hibernate Session办理入门(hibernate session方法)

发表评论

您需要后才能发表评论