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

使用Spring jpa在junit上进行Spring事务注释

郝峰
2023-03-14

为什么测试用例需要@Transactional,其功能将在dao层中进行更新(JPA存储库),比如

@Test
@Transactional
public void processTestSuccess() throws Exception{
    abc.process();//abc instance of Abc class
}

public class Abc{
   @Transactional
   public void process(){
      .....
      jpaRepository.update(10); // spring jpa repo updating something
   }
}

当测试在没有@Transaction注释的情况下运行时,它会在行中给出以下异常

jpa.update(10);

组织。springframework。刀。InvalidDataAccessApiUsageException:执行更新/删除查询;嵌套的异常是javax。坚持不懈TransactionRequiredException:执行更新/删除查询

共有1个答案

云煌
2023-03-14

您的方法进程()@Transactional注释。这意味着它需要一个事务。

由于您似乎是在Spring应用程序上下文中运行此操作,因此会对注释进行评估,如果现在事务可用,则会引发异常。

通过向测试中添加@Transactional,可以使事务可用(将在测试结束时回滚)。

 类似资料:
  • 下面是一个使用JdbcTemplate的示例。我的问题是,由于runTimeException,doMultipleCalls()在第3步失败,一切是否都会回滚。我只有对多个调用的事务注释,而没有对其他调用的注释。所有人是否共享同一个事务会话?。如果没有,那么如何跨多个服务器传递相同的事务会话?

  • 我对Spring交易非常陌生。由于我的组织使用的一些代码标准,我要求在调用任何方法时加入父事务(如果存在)。 我的应用程序是一个SpringMVC应用程序,有三层 Web层(控制器类) 服务层(包含业务逻辑的服务类) DAO Layer(数据库相关查询的DAO(数据访问层)类) 现在,在服务层上的一个方法中使用了dao层的三种不同方法。我使用@transactional将此服务方法注释为事务性的。

  • 上下文2。XML 这会导致将抽象类的transactionManager属性设置为服务器启动期间创建的最后一个注释事务方面bean'org.springframework.transaction.interceptor.TransactionAspectSupport。 因此,如果实例化的最后一个bean是dataSource1,则在dataSource1上创建事务,否则在DataSource2上

  • 我发现实际上是Spring,我能够设置一些工作。现在,我想使用Hibernate/JPA将导入的数据保存到数据库中,但我总是出现这样的错误: 我明白问题出在交易上。以下是和的spring java配置: 这是导致异常的代码: 有什么解决这个问题的想法吗? [编辑]我也放入了作业定义和步骤定义。我所有的Spring配置都是用Java编写的。 任何人都可以给出更多的见解,如何在spring Batch

  • 本文向大家介绍Spring 使用注解方式进行事务管理配置方式,包括了Spring 使用注解方式进行事务管理配置方式的使用技巧和注意事项,需要的朋友参考一下 使用步骤: 步骤一、在spring配置文件中引入<tx:>命名空间 步骤二、具有@Transactional 注解的bean自动配置为声明式事务支持 步骤三、在接口或类的声明处 ,写一个@Transactional. 要是只在接口上写, 接口的

  • 问题内容: Spring框架在多大程度上适用于事务处理?我读过《 Spring In Action》一书中的建议,并提供了一些示例,这些示例创建了不用担心会话和事务管理的DAO方法,只需通过以XML设置会话工厂和事务模板,然后将它们连接到DAO中即可。另一方面,SpringSource.org的文档建议需要大量的XML和/或注释才能实现此目的。 真相是什么,我按照以下方式获取代码的最简单方法是什么