Spring 当使用Junit进行测试时,JPA EntityManager值不会持久化到数据库中

Spring 当使用Junit进行测试时,JPA EntityManager值不会持久化到数据库中,spring,hibernate,jpa,junit,jpa-2.0,Spring,Hibernate,Jpa,Junit,Jpa 2.0,我在Spring3中使用Hibernate4,当我尝试进行Junit测试时,值不会持久化到数据库中 在我的DAO实现类中 @Transactional @Repository public class ProjectDAOImpl extends GenericDAOImpl<Project> implements ProjectDAO { public void create(Project project) { entityManager.per

我在Spring3中使用Hibernate4,当我尝试进行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;
    }
虽然我可以在控制台中看到该语句的值,但该记录并没有保存在数据库中

System.out.println("val  2  -- "+project.getProjectNo());

如何解决此问题?

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

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

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

由于@TransactionConfigurationSpring Framework 4.2问世以来已被弃用,因此建议使用@Rollback

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

@波尔潘很高兴我能帮上忙。哦,天哪,多好的论坛啊。这正是我所缺少的。非常感谢您分享您的知识,并感谢@user75ponic发布此问题。这帮我省去了很多麻烦。
@Rollback(false)
@ContextConfiguration({"classpath:applicationContext.xml"})
@Transactional
@RunWith(SpringJUnit4ClassRunner.class) 
public class ProjectTest {
    //Tests here
}