如果我使用Session.getCurrentTransaction().commit()
关闭会话或在方法结束时使用session.close()
关闭会话会怎样?
public static void deleteYear(Years year)
{
Session session = sessionFactory.openSession();
session.beginTransaction();
session.delete(year);
// what is the best way to close session
session.getTransaction().commit();
//or : session.close(); ???
}
答案 0 :(得分:4)
sessionFactory.openSession()
:它会打开session
session.beginTransaction()
:它开始于transaction,一个事务是一个原子工作单位,应该完全成功或失败。
session.getTransaction().commit()
:它提交事务,意味着beginTransaction之间发生的所有事情,这个调用将被持久化到数据库。如果您未提交事务,那么事务中发生的所有更改都将丢失。提交交易不会关闭会话
session.close()
:关闭会话并释放获取的资源。
这意味着您需要同时拨打commit()
和session.close()
。
public static void deleteYear(Years year)
{
Session session = sessionFactory.openSession();
session.beginTransaction();
session.delete(year);
session.getTransaction().commit();
session.close();
}
答案 1 :(得分:0)
更好的会话交易方式
Session sess=getSession();
Transcration tx=sess.beginTranscration();
//do something with session
sess.save(obj);
tx.commit();
sess.close;
我建议this。
答案 2 :(得分:0)
这完全是两件事。
COMMIT
进行了迄今为止transaction
内发生的更改
CLOSE
关闭会话,您无法再访问该会话。
所以你们可以在一起。
要记住的注意事项:无需关闭会话;但是,会话最后应DISCONNECT
。