休眠: 如果在hibernate会话中添加了任何Transient对象,为什么在关闭会话时hibernate不能持久化它(在其脏检查之后)。
是否有任何此类选项可用。 此外,如果存在这样的选择,那么我们为什么要开始交易&说它要承诺。 (session.beginTransaction())
当我们说session.close()时,transaction.commit()所做的功能也可以完成吗? 请任何人向我解释这一点。
答案 0 :(得分:3)
Transaction demarcation对于正确使用RDBMS至关重要,这就是您需要使用Hibernate启动和提交事务的原因。
关于您的问题,您在关闭会话时无法隐式关闭事务,但通常会在关闭事务后立即关闭会话。 Hibernate以contextual sessions。
的形式为此模式提供特殊支持一些框架(Spring,EJB等)进一步消除了以编程方式开始和提交事务的需要 - 它们提供了声明式事务方法,允许您将方法标记为事务性声明。也就是说,它们打开上下文会话(如果需要)并在您输入这样的方法时开始事务,并在您从中返回时提交事务并关闭会话(如果需要)。
答案 1 :(得分:0)
session.beginTransaction用于启动一个事务,该事务可能包含一个或多个原始操作,如INSERT,SELECT,DELETE等。 而transaction.commit()用于提交事务期间发生的所有更改,以便数据库在操作后保持一致状态。