为什么要使用session.beginTransaction&器transaction.commit

时间:2012-04-16 09:45:23

标签: java hibernate session transactions

休眠: 如果在hibernate会话中添加了任何Transient对象,为什么在关闭会话时hibernate不能持久化它(在其脏检查之后)。

是否有任何此类选项可用。 此外,如果存在这样的选择,那么我们为什么要开始交易&说它要承诺。 (session.beginTransaction())

当我们说session.close()时,transaction.commit()所做的功能也可以完成吗? 请任何人向我解释这一点。

2 个答案:

答案 0 :(得分:3)

Transaction demarcation对于正确使用RDBMS至关重要,这就是您需要使用Hibernate启动和提交事务的原因。

关于您的问题,您在关闭会话时无法隐式关闭事务,但通常会在关闭事务后立即关闭会话。 Hibernate以contextual sessions

的形式为此模式提供特殊支持

一些框架(Spring,EJB等)进一步消除了以编程方式开始和提交事务的需要 - 它们提供了声明式事务方法,允许您将方法标记为事务性声明。也就是说,它们打开上下文会话(如果需要)并在您输入这样的方法时开始事务,并在您从中返回时提交事务并关闭会话(如果需要)。

答案 1 :(得分:0)

session.beginTransaction用于启动一个事务,该事务可能包含一个或多个原始操作,如INSERT,SELECT,DELETE等。 而transaction.commit()用于提交事务期间发生的所有更改,以便数据库在操作后保持一致状态。