SessionFactory.openSession()& SessionFactory.getCurrentTransaction()。提交()

时间:2013-04-06 07:31:21

标签: java hibernate

如果我使用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(); ???
}

3 个答案:

答案 0 :(得分:4)

ASAIK,这两个是完全不同的操作。

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