@Test
public void testTeacherSave() {
Teacher t = new Teacher();
t.setName("t1");
t.setTitle("middle");
t.setBirthDate(new Date());
//Session session = sessionFactory.openSession(); //古老的用法,永远创建新的session
//当前上下文环境有session时,会直接拿过来用,如果没有,则创建新的session。且不需要写session.close()
//在session提交之前,无论拿几次,都是同一个session,而一旦session提交了,再拿,就是新的了。
Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.save(t);
Session session2 = sessionFactory.getCurrentSession();
System.out.println(session == session2);
session.getTransaction().commit(); //第一个session提交了,就关闭了
Session session3 = sessionFactory.getCurrentSession();
System.out.println(session == session3);
}
输出的结果为:
true
false
简单来说,opensession每次打开的都是新的session,且需要close。而getCurrentSession则会先从上下文环境中找,找到了则会直接拿过来,如果没有,则创建新的session,且事务提交后会自动close。
getCurrentSession的用途:界定事务边界。