0

这两个代码片段有什么区别,基本上我对第一个代码中的这两个代码片段有些困惑,我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;
    }
4

1 回答 1

1

根据定义:

事务与 Session 相关联,通常通过调用 Session.beginTransaction() 来实例化。单个会话可能跨越多个事务,因为会话(应用程序和数据存储之间的对话)的概念比事务的概念粒度更粗。但是,在任何时候,最多有一个与特定会话相关联的未提交事务。

由于您正在执行 WRITE 操作(插入-更新-删除),因此您将无法使用第二种方法将对象持久保存在 db 中。要将对象持久保存在数据库中,您必须开始事务并提交它。

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

于 2013-02-14T13:14:16.603 回答