方法一:
- Configuration cfg = new Configuration();
- cfg.configure();
- ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
- SessionFactory sessionFactory = cfg.buildSessionFactory(serviceRegistry);
- Session session = sessionFactory.openSession();
使用openSession()方法打开,每次都是打开新的Session,用完后需要close()。
方法二:
- Configuration cfg = new Configuration();
- cfg.configure();
- ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
- SessionFactory sessionFactory = cfg.buildSessionFactory(serviceRegistry);
- Session session = sessionFactory.getCurrentSession();
使用getCurrentSession()打开,若已存在session则打开现有session,若不存在则创建新的session。
在事务提交之前所有的getCurrentSession()打开的都是同一个session,例如:
- Configuration cfg = new Configuration();
- cfg.configure();
- ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
- SessionFactory sessionFactory = cfg.buildSessionFactory(serviceRegistry);
- Session session1 = sessionFactory.getCurrentSession();
- Session session2 = sessionFactory.getCurrentSession();
则有session1==session2。
若事务提交之后的getCurrentSession()则和提交之前得到的不是同一个session,例如:
- Configuration cfg = new Configuration();
- cfg.configure();
- ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
- SessionFactory sessionFactory = cfg.buildSessionFactory(serviceRegistry);
- Session session1 = sessionFactory.getCurrentSession();
- Transaction transaction = session1.beginTransaction();
- transaction.commit();
- Session session2 = sessionFactory.getCurrentSession();
则有session1 != session2,即原有事务已提交session后,则getCurrentSession()打开的是新的session。
-----通过getCurrentSession()获得的session在事务提交的时候自动close()而不需再close()。
注意:使用getCurrentSession()之前需要设置session context,在配置文件hibernate.cfg.xml中设置<property name="current_session_context_class">thread</property>
转自:http://blog.csdn.net/quchj89/article/details/7569894