Hibernate在获得一个session的时候,可以通过sessionFactory.openSession()和sessionFactory.getCurrentSession()两种方式。故名肆意,前者就是新创建一个session,而后者就是获得当前的session来使用,如果当前没有session那么创建一个新的session,但是这两者使用起来还是有些区别。
1. 如果多次使用openSession,则每次获取的session都不是同一个对象;而多次调用getCurrentSession获取的都是同一个对象;
2.使用openSession之后必须手动close,但是getCurrentsession会自动close;
3.getCurrentsession界定了事务边界,在hibernate.cfg.xml中需要加上如下配置:<property name="current_session_context_class">thread</property>;
4.如果对数据的操作不需要开始事务,例如查询操作,那么最好使用openSession,不然会报错:createSQLQuery is not valid without active transaction;如果使用了getCurrentSession,则需要开启事务才能查询成功。