2

休眠:如果将任何瞬态对象添加到休眠会话中,为什么当我关闭会话时休眠不能持久保存它(在其脏检查之后)。

有没有这样的选择。此外,如果存在这样的选项,那么为什么我们要开始交易并说它要提交。(session.beginTransaction())

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

4

2 回答 2

3

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

关于您的问题,您不能在关闭会话时隐式关闭事务,但有一种常见做法是在关闭事务后立即关闭会话。Hibernate 以上下文会话的形式为这种模式提供了特殊的支持。

一些框架(Spring、EJB 等)通过消除以编程方式开始和提交事务的需要而走得更远——它们提供声明性事务方法,允许您以声明方式将方法标记为事务性方法。也就是说,当您输入此类方法时,它们会打开上下文会话(如果需要)并开始事务,并在您从它返回时提交事务并关闭会话(如果需要)。

于 2012-04-16T10:49:47.543 回答
1

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

于 2012-04-16T10:53:52.867 回答