Performance 在hibernate中忘记提交事务

Performance 在hibernate中忘记提交事务,performance,spring,hibernate,Performance,Spring,Hibernate,我正在为我的web应用程序使用hibernate和spring 在某些地方,我忘记了提交事务…如下面的代码 SessionFactory sf = HibernateUtils.getSessionFactory(); session = sf.openSession(); tx = session.beginTransaction(); ..........................................Some

我正在为我的web应用程序使用hibernate和spring

在某些地方,我忘记了提交事务…如下面的代码

 SessionFactory sf = HibernateUtils.getSessionFactory();
                session = sf.openSession();
                tx = session.beginTransaction();
..........................................Some Code.............................

But forgot to commit transaction.....

finally
{
session.flush();
session.close();
}
现在我的问题是:-

  • 这会给我带来什么问题吗
  • 关于内存泄漏的任何问题
  • 增加数据库的负载

或者这对我的系统有什么影响

  • 事务中涉及的表将被锁定,直到连接断开/关闭
  • 作为事务的一部分对表所做的更改将仅适用于从池中重用相同连接的用户,而不适用于其他用户
  • 如果在关闭/断开连接之前从未对此类连接调用
    commit()
    方法,则在关闭/断开连接后所做的所有更改都将丢失

基本上,系统的行为是任意的,这意味着这对你来说是个问题。但它不会导致任何内存泄漏。

@Vidor感谢您的回复。当我在机器中检查我的进程时,它会在理想事务中显示这么多进程……这就是原因吗?不,空闲连接是池中未被任何DB相关代码积极使用的连接。这不是由于未提交事务造成的。一旦在连接上调用
close()
,无论其中是否有任何事务,该连接都将返回到空闲池。@Vidor您在回答中描述的第三点在我的案例中从未发生过,这意味着我从未丢失过任何数据或更改……可能,前提是连接池向提交事务的代码的另一部分提供相同的连接。不过,正如我在回应中所说,这是非常武断的。这里只是澄清一下。当连接关闭时,发送到数据库的未提交更改的情况取决于数据库。例如,Oracle JDBC驱动程序提交了这样的更改。我认识的每一个司机都会把车开回去。