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

Spring:多个事务

贺博厚
2023-03-14

我正在使用spring boot和spring-data-jpa开发一个应用程序,其中我有一个方法,它可以做两件事:

下面是你的方法:

@Transactional(rollbackFor=Exception.class)
public synchronized void saveMessageFilters(List<MessageFilter> list) {
    logger.debug("Insert or update message filters <{}>", list);
    for (MessageFilter filter : list) {
        checkIfMessageFilterExists(filter);
        MessageFilter messageFilter = messageFilterRepository.save(filter);
        logger.info("Message filter <{}> processed",messageFilter);
    }
    List<MessageFilter> messageFilters = (List<MessageFilter>)messageFilterRepository.findAll();
}

共有1个答案

温成济
2023-03-14

JPA可能会在执行findAll之前刷新挂起的更新操作,这就是它在findAll方法上触发错误的原因。

只需在执行findAll之前手动刷新即可

messageFilterRepository.flush();
List<MessageFilter> messageFilters = (List<MessageFilter>)messageFilterRepository.findAll();
 类似资料:
  • 我在运行于Tomcat7的web应用程序中使用Spring3.2和JPA以及Hibernate4。应用程序分为控制器类、服务类和DAO类。服务类在类和方法级别具有带注释的事务配置。DAO是由@PersistenceContext注释注入实体管理器的普通JPA。 我打开了org的调试日志记录。springframework。交易并注意到,“创建新交易”、“打开新EntityManager”、“获取…

  • 我正在使用DAO进行事务管理。场景是创建包含quote_line和客户列表的新报价。如果客户不存在,它将把它插入表客户中。我的代码是如下架构: 在调试模式下,我只有两个变量:1-这(QuoteService)2-quote 这是th日志: 您可以注意到,消息“第44行删除”已打印,但没有从hibernate查询中删除的痕迹。 这段代码不起作用:使用customerDao和quoteLineDao的

  • 问题内容: 我在Junit应用程序上下文文件中定义了三个(JDBC)。其中两个需要进行事务管理;使用这两个数据源时,我不必链接任何方法(它们完全彼此独立)。 当我使用单个事务管理器作为时,我没有问题,即使已被使用但未在相应方法中进行管理。尽管如此,在还需要管理来自各种DAO类的方法(仅使用这些方法)后,我添加了第二个事务- 。上下文文件包含以下内容: 由于要定义多个事务管理器,因此我用他们自己的值

  • 是否可以使用Hibernate Spring对以下内容进行建模。 公开会议 我使用Spring TransactionTemplate,它同时执行会话事务生存期范围。 原因是,有时我在业务流程中有几个阶段,我希望在每个阶段完成后提交。但是,我希望继续使用相同的持久对象。如果每个事务都有一个单独的会话,则会出现暂时/分离的异常,因为原始会话已关闭。 这有可能吗?

  • null 下面是一个示例代码- 我的问题是,updateDb02中的setRollbackOnly()只回滚Db01事务。

  • 我试图使用在官方Fabriz-Samples存储库中找到的invoke函数同时向fabric提交两个事务。 你知道吗?