我正在编写集成测试,在一种测试方法中,我想将一些数据写入DB,然后再读取它。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
@TransactionConfiguration()
@Transactional
public class SimpleIntegrationTest {
@Resource
private DummyDAO dummyDAO;
/**
* Tries to store {@link com.example.server.entity.DummyEntity}.
*/
@Test
public void testPersistTestEntity() {
int countBefore = dummyDAO.findAll().size();
DummyEntity dummyEntity = new DummyEntity();
dummyDAO.makePersistent(dummyEntity);
//HERE SHOULD COME SESSION.FLUSH()
int countAfter = dummyDAO.findAll().size();
assertEquals(countBefore + 1, countAfter);
}
}
如您所见,在存储和读取数据之间,应该刷新会话,因为默认的
FushMode
是AUTO
,因此实际上没有数据可以存储在DB中。问题:我可以在会话工厂或其他地方为避免重复
FlushMode
调用而将ALWAYS
设置为session.flush()
吗?DAO中的所有数据库调用都与
HibernateTemplate
实例一起使用。提前致谢。
最佳答案
尝试添加以下内容:
@Autowired
private SessionFactory sessionFactory;
@Before
public void myInitMethod(){
sessionFactory.getCurrentSession().setFlushMode(FlushMode.ALWAYS);
}