gpt4 book ai didi

spring - 使用 Junit 进行测试时,JPA EntityManager 值不会保留在数据库中

转载 作者:行者123 更新时间:2023-12-03 18:17:54 25 4
gpt4 key购买 nike

我在 Spring 3 中使用 Hibernate 4,当我尝试进行 Junit 测试时,值不会保留在数据库中

在我的 DAO 实现类中

@Transactional
@Repository
public class ProjectDAOImpl extends GenericDAOImpl<Project>
implements ProjectDAO {

public void create(Project project) {
entityManager.persist(project);
System.out.println("val 2 -- "+project.getProjectNo());
}

@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}

在 Junit 测试中我有
@TransactionConfiguration
@ContextConfiguration({"classpath:applicationContext.xml"})
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
public class ProjectTest {

@Resource
ProjectService projectService;

@Test
public void createProject(){
Project project = new Project();
project.setProjectName("999---");
projectService.create(project);
}

我可以在控制台中看到此语句的值,但是记录未保存在数据库中。
System.out.println("val  2  -- "+project.getProjectNo());

我该如何解决这个问题?

最佳答案

默认情况下,Spring Test 将回滚单元测试中的所有事务,导致它们不会出现在数据库中。

您可以通过向测试类添加以下注释来更改默认设置,这将导致事务被提交。

@TransactionConfiguration(defaultRollback=false)
@ContextConfiguration({"classpath:applicationContext.xml"})
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
public class ProjectTest {
//Tests here
}

关于spring - 使用 Junit 进行测试时,JPA EntityManager 值不会保留在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17783275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com