是否需要提交打开的hibernate事务。如果有人没有,会发生什么? 是否导致某些问题?
谢谢
答案 0 :(得分:1)
提交将使数据库提交。对持久对象的更改将写入数据库。如果您未提交,则会丢失您在数据库中所做的更改。
答案 1 :(得分:1)
事务必须通过提交或回滚结束。
为什么?
交易消耗资源:
因此,如果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块中提交事务。