当前位置: 首页 > 知识库问答 >
问题:

如何在spring中回滚事务

方砚
2023-03-14

我在使用@Transactional注释进行事务回滚时遇到了一个问题。

我在backingbean、service和dao类中有以下方法:

public class ItemBackingBean {
    public void saveUpdate() {
        try {
            ItemService.executeTransaction();
        }
        catch(Exception e) {
        }
    }
}

public class ItemService {
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void executeTransaction() {
        deleteItem();
        createOrder();
    }

    private void deleteItem() {
        persist();
    }

    private void createOrder() {
        persist();
    }

    private void persist() {
        JpaDaoImpl.persist(object);
        JpaDaoImpl.update(object);
    }
}

public class JpaDaoImpl implements JpaDao {
    @Transactional(readOnly = true)
    public persist(Object object) {
        getEm().persist(object);
    }

    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    public void update(Object object) {
        getEm().merge(object);
    }

    @Transactional(readOnly = true)
    public void remove(Object object) {
        getEm().remove(object);
    }
}

共有1个答案

钱远
2023-03-14

对于那些不想引发异常的人(不应该只在异常发生时对事务进行回滚),可以使用以下命令:TransactionAspectSupport.currentTransactionStatus().setRollBackOnly();

 类似资料:
  • 我为教育阿帕奇骆驼交易编写了此代码 我在发生错误后使用事务处理,我必须触发事务回滚,但由于某种原因,消息保留在SAMPLE_2和SAMPLE_3队列中。为什么? 更新: 我添加了豆子 并修复路线,但这对我没有帮助: 我在文档中找到了这个配置 如何从这个xml创建bean?

  • 我使用的是Spring3.0.5和Hibernate3.6。在我的项目中,有一个场景,我必须回滚在抛出的任何异常或错误发生的事务。这是示例代码,除了当我抛出异常时事务不会回滚之外,一切都很好,但是如果抛出任何异常,比如mysql.IntegrityConstraintException,那么事务会回滚,为什么在我的情况下没有发生这种情况? hibernate.cfg 因此,正如我所说,我的问题是,

  • 我有一个由Spring框架维护的对象,我使用注释将它注入到我想要的任何DAO类中,如下所示。 我使用那些DAO类在数据库中保存如下内容。 现在,这里的两个DAO都使用了通过注入的相同的。现在,如果在之后发生异常,那么我甚至希望回滚保存的实体。但是,如何从中获取? 如果所有DAO都持有相同的对象,那么我可以直接调用类的方法吗?返回新事务或当前与关联的任何事务吗?

  • -ZJ 以下是我在Application.Properties中的数据源设置:

  • 更奇怪的是,在日志中我看到:

  • 我列出了一个问题“Spring事务失败回滚”。我有一个服务类,它调用2 DAO将数据插入到数据库表中。 我的事务配置: 我的服务和dao定义如下: