需要提交开放交易吗?

时间:2013-12-24 10:57:09

标签: java hibernate transactions

是否需要提交打开的hibernate事务。如果有人没有,会发生什么? 是否导致某些问题?

谢谢

4 个答案:

答案 0 :(得分:1)

提交将使数据库提交。对持久对象的更改将写入数据库。如果您未提交,则会丢失您在数据库中所做的更改。

答案 1 :(得分:1)

事务必须通过提交或回滚结束。

为什么?

交易消耗资源:

  • 内存中的一些字节
  • 通常是JBDC连接。 (或与跨国外部资源的任何联系)

因此,如果tx永远不会结束:它将永远使用JDBC连接,很可能会耗尽数据库连接。

结论:您不需要提交每个tx,但是您需要终止它们:通过提交或回滚(tx没有其他结束状态)

答案 2 :(得分:1)

它不仅适用于hibernate事务,还适用于所有数据库事务。提交/回滚是 ACID (原子性,一致性,隔离性,持久性)属性的原子性,它们实际上代表/指定TRANSACTION。原子性更像是做或死。

回答您的问题:

//creates something like cache/temporary space for you to perform all your operations. Note   this changes will not be reflected in your database at this point.
 Session.beginTransaction();

//perform some db operations 

//this line flushes/post your changes from temporary stuff to database. If your changes contains error then this will not be affected/made changes to the database else the changes will be affected.
Session.commit();

希望这有用!

答案 3 :(得分:0)

必须关闭交易。因此,只要hibernate.cfg.xml中提到的当前上下文属性是线程而不是托管,通过提交事务将自动关闭。
这是为了维护事务的ACID属性。此外,当交易开始时,它被分配了大量的内存和资源 最佳实践建议的是,如果catch块中存在异常,则应该回滚整个事务并关闭会话,并且应该在try块的最后部分而不是finally块中提交事务。