5

我将 Hibernate 4 与 Spring 3 一起使用,当我尝试进行 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());

我该如何解决这个问题?

4

2 回答 2

13

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

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

@TransactionConfiguration(defaultRollback=false)
@ContextConfiguration({"classpath:applicationContext.xml"})
@Transactional
@RunWith(SpringJUnit4ClassRunner.class) 
public class ProjectTest {
    //Tests here
}
于 2013-07-22T08:56:19.513 回答
8

基于@TransactionConfiguration自Spring Framework 4.2发布以来已被弃用的事实,建议使用@Rollback

@Rollback(false)
@ContextConfiguration({"classpath:applicationContext.xml"})
@Transactional
@RunWith(SpringJUnit4ClassRunner.class) 
public class ProjectTest {
    //Tests here
}
于 2016-05-27T09:34:30.340 回答