比较来自世界各地的卖家的域名和 IT 服务价格

设置会话刷新模式 Hibernate 在 Spring

我正在编写集成测试,并且在一个测试方法中,我想写下一些数据 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//

?

所有通话 DB 在 DAO instance
HibernateTemplate

.

提前致谢。
已邀请:

帅驴

赞同来自:

尝试添加到下一个:


@Autowired
private SessionFactory sessionFactory;

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

君笑尘

赞同来自:

这应该足够:


@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///;
}
}


经过 applicationContext.xml


<bean class="org.springframework.orm.hibernate.HibernateTransactionManager" id="transactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"></ref>
</property>
</bean>


如果您对此情景工作的交易有疑问,请查看源
http://static.springsource.org ... .html
.

你也可以使用
http://static.springsource.org ... .html
用于代理事务。

喜特乐

赞同来自:

依据
http://docs.jboss.org/hibernat ... shing
, 在以下几点中默认情况下会发生清洗:

在执行一些请求之前

经过 org.hibernate.Transaction.commit//

经过 Session.flush//

因此,在呼叫之前
dummyDAO.findAll//.size//;

会话中的对象已在数据库中重置。 安装 FlushMode 在 ALWAYS 不需要。

要回复问题请先登录注册