Java 在Hibernate驱动的Spring应用程序中调试JUnit测试

Java 在Hibernate驱动的Spring应用程序中调试JUnit测试,java,spring,hibernate,debugging,junit,Java,Spring,Hibernate,Debugging,Junit,也许这个问题已经得到了回答,但我没有找到任何建议。。。 我的项目是一个Spring实用程序项目,我使用的数据库是MySQL,为了持久化,我将Hibernate与c3p0连接池结合使用。我在春季3.2和冬眠3.5。 下面是我想做的: 我想调试JUnit测试,跳过一些持久性函数(保存、更新等),然后通过SQL手动检查数据库中的条目。由于JUnit测试总是在事务中运行,因此我无法检查数据库中的条目,因为每次测试完成/commit从未发生时都会发生回滚 有没有办法在JUnit测试期间伪造事务存在或绕过它

也许这个问题已经得到了回答,但我没有找到任何建议。。。 我的项目是一个Spring实用程序项目,我使用的数据库是MySQL,为了持久化,我将Hibernate与c3p0连接池结合使用。我在春季3.2和冬眠3.5。 下面是我想做的: 我想调试JUnit测试,跳过一些持久性函数(保存、更新等),然后通过SQL手动检查数据库中的条目。由于JUnit测试总是在事务中运行,因此我无法检查数据库中的条目,因为每次测试完成/commit从未发生时都会发生回滚


有没有办法在JUnit测试期间伪造事务存在或绕过它们?

也许您可以在调试会话期间在Hibernate中刷新事务,并强制Spring/Hibernate写入数据库


或者,您可以关闭调试会话的事务

在事务发生时查看数据库的最佳方法是使用允许脏读的隔离级别进行查询,而不是伪造事务存在。执行此操作的机制因数据库而异,在MySQL中,您可以使用

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
在查询之前


显然,您还需要在测试期间强制Hibernate刷新对数据库的写入,并在刷新后设置断点。

不幸的是,刷新不是解决方案,因为“刷新”实体仍在事务中,对我的sql查询不可见。但是在我的测试环境中完全关闭事务可能是一个解决方案。我要试试看!事务回滚后是否需要放置断点?如果您可以在事务回滚之前将断点放在测试中,那么您还有几个选项。不,在回滚发生之前。我需要在事务处理期间查看数据库。但是我越想这个问题,我就越觉得这是一个概念性的问题,因为junit的实际意义是,它们总是会因为不影响其他测试而回滚。。。因此需要事务:-/Yes。事务隔离是关键词!我现在已经将我的测试环境移到了一个h2数据库中,并在研究他们的文档时发现了这一点。“readuncommitted”是帮助我更好地调试测试的设置!无论如何,谢谢你;)