解决方案 »

  1.   

    SessionFactory本身就不用关闭的,这个是创建session的工厂,对于session才需要close
      

  2.   


    我得到SessionFactory是new AnnotationConfiguration().configure().buildSessionFactory()本身也有提供close()方法。那如果不关闭,那这个本身不是越创建越多吗?或者说它这样被创建后一直存在对性能有和影响不?
      

  3.   


    我得到SessionFactory是new AnnotationConfiguration().configure().buildSessionFactory()本身也有提供close()方法。那如果不关闭,那这个本身不是越创建越多吗?或者说它这样被创建后一直存在对性能有和影响不?
    sessionFactory不需要一直创建。构建sessionFactory是很费时的,他需要解析hibernate的配置文件,以及JPA注解。我们操作时都是用session,只有你整个项目都不用了才把sessionFactory关闭。
      

  4.   

    把SessionFactory弄成单例的,让它一直开着吧
      

  5.   


    我得到SessionFactory是new AnnotationConfiguration().configure().buildSessionFactory()本身也有提供close()方法。那如果不关闭,那这个本身不是越创建越多吗?或者说它这样被创建后一直存在对性能有和影响不?
    sessionFactory不需要一直创建。构建sessionFactory是很费时的,他需要解析hibernate的配置文件,以及JPA注解。我们操作时都是用session,只有你整个项目都不用了才把sessionFactory关闭。这样说的话,那SessionFactory的是应该怎么创建比较好呢?我获取SessionFactory就放在start()方法里,那么每次Dao操作一个方法就会调用一次,那不就是一直在创建了呢?还是说SessionFactory本身被创建一次后就存在于整个项目的作用范围内被所有用户使用,其它调用start()方法的用户都能自动获取已经被创建的这个SessionFactory对象?
      

  6.   


    因为我在想每次Dao操作调用一个方法都会使用到一次创建SessionFactory的操作,那不关闭不会越创建越多吗?
      

  7.   

    你可以把SessionFactory的创建写在专门的类中可以叫HibernateUtils里面用getSessionFactory获取SessionFactory,而这个SessionFactory应该是单例的。那么dao只要用HibernateUtils.getSessionFactory()就可以了public class HibernateUtils{
       private static SessionFactory sessionFactory;
       static{
          sessionFactory=new AnnotationConfiguration().configure().buildSessionFactory();
       }
       public static SessionFactory getSessionFactory(){
          return sessionFactory;
       }
    }
      

  8.   

    你可以把SessionFactory的创建写在专门的类中可以叫HibernateUtils里面用getSessionFactory获取SessionFactory,而这个SessionFactory应该是单例的。那么dao只要用HibernateUtils.getSessionFactory()就可以了public class HibernateUtils{
       private static SessionFactory sessionFactory;
       static{
          sessionFactory=new AnnotationConfiguration().configure().buildSessionFactory();
       }
       public static SessionFactory getSessionFactory(){
          return sessionFactory;
       }
    }
    原来如此,是单例模式让它的创建对象在应用中只保持一个。茅塞顿开!非常感谢你的指点!