精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-12-23
springside的高人也说过:hibernate太奸诈了,如果全部默认回滚,只会在session里干活,一点不写数据库,达不到完全的测试效果。 http://www.springside.org.cn/docs/reference/UnitTest.htm 如果是这样的话,是否可以认为,AbstractTransactionalDataSourceSpringContextTests对hibernate来说,是个完全的鸡肋?因为不提交的话,事务完全回滚,根本不写数据库,连错误都找不出;提交的话,又破坏了数据。 如果不是鸡肋,那该如何改进? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-12-24
不好意思,刚才问题没想清楚,代我再想想发出来。
|
|
返回顶楼 | |
发表时间: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();}...} 这样在事务提交或回滚前,错误会报出来。 |
|
返回顶楼 | |
发表时间:2006-12-24
用super.setDefaultRollBack(false)我试过,弄脏了数据。
Godlikeme的方法我再尝试一下,多谢各位的帮助。 |
|
返回顶楼 | |
发表时间:2006-12-24
好象遇到过类似问题,发现在调用一些查询方法后,之前还正常的一些测试会报错,当时觉得很奇怪。
楼主你试试在代码中掺杂一些无关紧要的查询方法调用,估计hibernate怕你读出脏数据就会执行写入操作了 |
|
返回顶楼 | |
发表时间:2006-12-24
ecsun 写道 super.setDefaultRollBack(false)
请先看清楚问题 |
|
返回顶楼 | |
发表时间:2006-12-24
daquan198163 写道 ecsun 写道 super.setDefaultRollBack(false)
请先看清楚问题 |
|
返回顶楼 | |
发表时间:2006-12-25
Godlikeme 写道 daquan198163 写道 ecsun 写道 super.setDefaultRollBack(false)
请先看清楚问题 对呀,这样不就可以防止hibernate不干活了么?并且在测试结束后也可以回滚,免得污染DB 当然,像你那样在tearDown里面显式的flush也应该可以的 |
|
返回顶楼 | |
发表时间:2006-12-25
daquan198163 写道 并且在测试结束后也可以回滚,免得污染DB
当然,像你那样在tearDown里面显式的flush也应该可以的 怎么回滚?我怎么回滚都不起作用,做插入操作的时候,总是把数据写入了数据库中。 |
|
返回顶楼 | |
发表时间:2006-12-25
netfly 写道 daquan198163 写道 并且在测试结束后也可以回滚,免得污染DB
当然,像你那样在tearDown里面显式的flush也应该可以的 怎么回滚?我怎么回滚都不起作用,做插入操作的时候,总是把数据写入了数据库中。 |
|
返回顶楼 | |