2

如果我在方法结束时关闭会话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(); ???
}
4

3 回答 3

4

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

sessionFactory.openSession():它打开一个会话

session.beginTransaction():它开始一个事务,事务是一个原子工作单元,应该完全成功或失败。

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();
}
于 2013-04-06T07:37:30.747 回答
0

进行会话事务的更好方法

Session sess=getSession();
Transcration tx=sess.beginTranscration();
//do something with session
sess.save(obj);
tx.commit();
sess.close;

我推荐这个

于 2013-04-06T07:37:14.333 回答
0

这是完全不同的两件事。

COMMITtransaction使迄今为止发生的变化。
CLOSE关闭会话,您将无法再访问该会话。

所以你可以同时拥有两者。

要记住的注意事项:没有必要关闭会话;但是,最后应该DISCONNECT编辑一个会话。

于 2013-04-06T07:55:14.673 回答