我正在编写集成测试,在一种测试方法中,我想将一些数据写入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);
    }
}


如您所见,在存储和读取数据之间,应该刷新会话,因为默认的FushModeAUTO,因此实际上没有数据可以存储在DB中。

问题:我可以在会话工厂或其他地方为避免重复FlushMode调用而将ALWAYS设置为session.flush()吗?

DAO中的所有数据库调用都与HibernateTemplate实例一起使用。

提前致谢。

最佳答案

尝试添加以下内容:

@Autowired
private SessionFactory sessionFactory;

@Before
public void myInitMethod(){
  sessionFactory.getCurrentSession().setFlushMode(FlushMode.ALWAYS);
}

08-06 20:43