我在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());
如何解决此问题?
答案 0 :(得分:12)
默认情况下,Spring Test将回滚单元测试中的所有事务,导致它们不出现在数据库中。
您可以通过将以下注释添加到测试类来更改默认设置,这将导致提交事务。
@TransactionConfiguration(defaultRollback=false)
@ContextConfiguration({"classpath:applicationContext.xml"})
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
public class ProjectTest {
//Tests here
}
答案 1 :(得分:6)
基于 @TransactionConfiguration 已弃用的事实,因为 Spring Framework 4.2 出现了,建议使用 @Rollback 。
@Rollback(false)
@ContextConfiguration({"classpath:applicationContext.xml"})
@Transactional
@RunWith(SpringJUnit4ClassRunner.class)
public class ProjectTest {
//Tests here
}