【问题标题】:Difference between SessionFactory.openSession() & SessionFactory.getCurrentTransaction().commit()SessionFactory.openSession() 和 SessionFactory.getCurrentTransaction().commit() 之间的区别
【发布时间】:2013-04-06 07:31:21
【问题描述】:

如果我在方法结束时使用Session.getCurrentTransaction().commit() 关闭会话或使用session.close() 关闭会话会怎样?

public static void deleteYear(Years year)
{
    Session session = sessionFactory.openSession();
    session.beginTransaction();
    session.delete(year);
            // what is the best way to close session
    session.getTransaction().commit();
            //or : session.close(); ???
}

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    ASAIK,这两个是完全不同的操作。

    sessionFactory.openSession():它打开一个session

    session.beginTransaction():它以transaction 开头,事务是一个原子工作单元,应该成功或完全失败。

    session.getTransaction().commit():它提交事务,意味着在 beginTransaction 和这个调用之间发生的所有事情都会被持久化到数据库中。如果您不提交事务,则事务中发生的所有更改都将丢失。提交事务不会关闭会话

    session.close():关闭会话并释放获取的资源。

    这意味着您需要同时调用commit()session.close()

    public static void deleteYear(Years year)
    {
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        session.delete(year);
        session.getTransaction().commit();
        session.close();
    }
    

    【讨论】:

      【解决方案2】:

      进行会话事务的更好方法

      Session sess=getSession();
      Transcration tx=sess.beginTranscration();
      //do something with session
      sess.save(obj);
      tx.commit();
      sess.close;
      

      我推荐this

      【讨论】:

        【解决方案3】:

        这是完全不同的两件事。

        COMMIT 进行迄今为止在transaction 中发生的更改。
        CLOSE 关闭会话,您将无法再访问该会话。

        所以你可以同时拥有。

        注意事项:不需要关闭会话;但是,会话结束时应为DISCONNECTed。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-14
          • 1970-01-01
          • 2012-04-21
          • 2023-03-07
          • 2021-11-01
          • 1970-01-01
          • 2021-12-25
          • 2020-05-10
          相关资源
          最近更新 更多