gla*_*666 6 spring hibernate spring-3
我正在编写集成测试,在一种测试方法中,我想将一些数据写入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);
}
}
Run Code Online (Sandbox Code Playgroud)
正如你可以存储和读取数据之间看到,会议应被刷新,因为默认FushMode是AUTO因此没有数据可以实际存储在数据库中.
问题:我FlushMode可以ALWAYS在会话工厂或其他地方设置如何设置以避免重复session.flush()呼叫?
DAO中的所有数据库调用都与HibernateTemplate实例有关.
提前致谢.
这应该足够了:
@ContextConfiguration(locations="classpath:applicationContext.xml")
public class SimpleIntegrationTest extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired(required = true)
private DummyDAO dummyDAO;
@Test
public void testPersistTestEntity() {
assertEquals(0, dummyDAO.findAll().size());
dummyDAO.makePersistent(new DummyEntity());
assertEquals(1, dummyDAO.findAll().size());
}
}
Run Code Online (Sandbox Code Playgroud)
来自 applicationContext.xml
<bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
Run Code Online (Sandbox Code Playgroud)
如果您对此场景中事务如何工作有疑问,请查看TransactionalTestExecutionListener的源代码。
您还可以使用AOP(面向方面编程)来代理事务。
| 归档时间: |
|
| 查看次数: |
17480 次 |
| 最近记录: |