论坛首页 Java企业应用论坛

AbstractTransactionalDataSourceSpringContextTests=鸡肋?

浏览 11940 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-12-23  
我用mysql做数据库,使用AbstractTransactionalDataSourceSpringContextTests测试时,发现根本没有写数据库,连错误都没有发生,直到我提交了事务才写数据库,并发现了错误。

springside的高人也说过:hibernate太奸诈了,如果全部默认回滚,只会在session里干活,一点不写数据库,达不到完全的测试效果。
http://www.springside.org.cn/docs/reference/UnitTest.htm

如果是这样的话,是否可以认为,AbstractTransactionalDataSourceSpringContextTests对hibernate来说,是个完全的鸡肋?因为不提交的话,事务完全回滚,根本不写数据库,连错误都找不出;提交的话,又破坏了数据。

如果不是鸡肋,那该如何改进?
   发表时间:2006-12-24  
不好意思,刚才问题没想清楚,代我再想想发出来。
0 请登录后投票
   发表时间:2006-12-24  
这个问题的关键在于,AbstractTransactionalDataSourceSpringContextTests缺乏对hibernate session的处理,需要对其进行扩展,
不知道测试代码是怎么写的,只是很奇怪没有session支持,测试怎么跑的起来。
扩展基本思路是在事务开始后,结束前把测试方法包装在

HibernateTemaplate.executeWithSession(...){
public Object doInHibernate(Session session) {
runTest();
session.flush();//synchornize database, errors will be reported.
session.clear();}...}

这样在事务提交或回滚前,错误会报出来。




0 请登录后投票
   发表时间:2006-12-24  
用super.setDefaultRollBack(false)我试过,弄脏了数据。
Godlikeme的方法我再尝试一下,多谢各位的帮助。
0 请登录后投票
   发表时间:2006-12-24  
好象遇到过类似问题,发现在调用一些查询方法后,之前还正常的一些测试会报错,当时觉得很奇怪。
楼主你试试在代码中掺杂一些无关紧要的查询方法调用,估计hibernate怕你读出脏数据就会执行写入操作了
0 请登录后投票
   发表时间:2006-12-24  
ecsun 写道
super.setDefaultRollBack(false)

请先看清楚问题
0 请登录后投票
   发表时间:2006-12-24  
daquan198163 写道
ecsun 写道
super.setDefaultRollBack(false)

请先看清楚问题
执行查询的时候是session flush 的,参考hibernate3.1文档10.10. Flushing the Session
0 请登录后投票
   发表时间:2006-12-25  
Godlikeme 写道
daquan198163 写道
ecsun 写道
super.setDefaultRollBack(false)

请先看清楚问题
执行查询的时候是session flush 的,参考hibernate3.1文档10.10. Flushing the Session

对呀,这样不就可以防止hibernate不干活了么?并且在测试结束后也可以回滚,免得污染DB
当然,像你那样在tearDown里面显式的flush也应该可以的
0 请登录后投票
   发表时间:2006-12-25  
daquan198163 写道
并且在测试结束后也可以回滚,免得污染DB
当然,像你那样在tearDown里面显式的flush也应该可以的


怎么回滚?我怎么回滚都不起作用,做插入操作的时候,总是把数据写入了数据库中。
0 请登录后投票
   发表时间:2006-12-25  
netfly 写道
daquan198163 写道
并且在测试结束后也可以回滚,免得污染DB
当然,像你那样在tearDown里面显式的flush也应该可以的


怎么回滚?我怎么回滚都不起作用,做插入操作的时候,总是把数据写入了数据库中。
这个问题太模糊了,不如把代码贴出来,大家看个清楚,
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics