Hibernate Session是由SessionFactory所创建,SessionFactory是执行绪安全的(Thread-Safe),您可以让多个执行绪同时存取SessionFactory而不会有数据共享的问题。
本文就Hibernate Session的入门加以简略介绍。
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类:
- HibernateUtil.java
- importnet.sf.hibernate.*;
- importnet.sf.hibernate.cfg.*;
- publicclassHibernateUtil{
- privatestaticLoglog=LogFactory.getLog(HibernateUtil.class);
- privatestaticfinalSessionFactorysessionFactory;
- static{
- try{
- //CreatetheSessionFactory
- sessionFactory=newConfiguration().configure().buildSessionFactory();
- }catch(Throwableex){
- log.error("InitialSessionFactorycreationfailed.",ex);
- thrownewExceptionInInitializerError(ex);
- }
- }
- publicstaticfinalThreadLocalsession=newThreadLocal();
- publicstaticSessioncurrentSession()throwsHibernateException{
- Sessions=(Session)session.get();
- //OpenanewSession,ifthisThreadhasnoneyet
- if(s==null){
- s=sessionFactory.openSession();
- session.set(s);
- }
- returns;
- }
- publicstaticvoidcloseSession()throwsHibernateException{
- Sessions=(Session)session.get();
- session.set(null);
- if(s!=null)
- s.close();
- }
- }
在同一个履行绪中,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
【修改引荐】
- Hibernate功能优化全面剖析
- 对Hibernate中get()与load()不同点剖析
- Struts-Spring-Hibernate事例
- 简述Hibernate装备衔接池
- 对Hibernate中get()与load()不同点剖析