使用beginTransaction()和commit()编写方法的区别或不编写beginTransaction()且不使用commit()它

时间:2013-02-14 12:28:18

标签: hibernate

这两段代码之间有什么区别,基本上我对第一段代码中的这两段代码感到困惑我正在通过开始一个事务然后提交它来执行动作create,并在第二段中我不是在写session.beginTransaction() and tx.commit()这是最好的方法,为什么?

还有一个问题select query也被视为交易?或者交易是一系列多个动作的系列,比如在一个工作单元中创建更新和删除?

public boolean createProject(EmployeeProject employeeProject) {
        Transaction tx = null;
        boolean flag = false;
        try {
            tx = session.beginTransaction();
            session.save(employeeProject);
            tx.commit();
            flag = true;
        } catch (HibernateException e) {
            if (tx != null)
                tx.rollback();

        }
        return flag;
    }

第二种方法

public boolean createProject(EmployeeProject employeeProject) {
        boolean flag ;
        try {
            session.save(employeeProject);
            flag = true;
        } catch (HibernateException e) {
            flag=false;

        }
        return flag;
    }

1 个答案:

答案 0 :(得分:1)

根据定义:

  

事务与会话关联,并且通常是实例化的   通过调用Session.beginTransaction()。单个会话可能跨越   自会话概念以来的多个交易(会话   在应用程序和数据存储区之间)具有更粗略的粒度   而不是交易的概念。但是,它的目的是在那里   最多是一个与特定关联的未提交事务   会议随时。

由于您正在执行WRITE操作(insert-update-delete),因此您将无法使用第二种方法在db中保留该对象。要在数据库中保留对象,您必须开始一个Transaction&提交它。

第二种方法仅适用于READ操作(例如SELECT查询)。