当前位置: 首页 > 面试题库 >

使用Hibernate / Spring / JUnit设置和删除复杂的数据库状态

宋耀
2023-03-14
问题内容

我有一个单元测试类,需要运行相当广泛的数据库,然后才能运行各个测试方法。这种设置需要很长时间:出于希望与手头问题无关的原因,我需要以编程方式填充数据库,而不是从SQL转储中填充数据库。

我的问题是拆卸。如何轻松回滚在数据库设置阶段所做的所有更改?

我目前正在使用Hibernate + Spring事务测试支持,因此我的各个测试方法都包含在事务中。

一种解决方案是在每种测试方法中进行数据库设置,以使数据库设置会自动回滚。但是,测试方法将永远需要运行,因为每种方法都需要重新准备数据库。

还有其他想法吗?基本上,我正在寻找一种方法来运行数据库设置,运行我的单个测试(每个测试都包装在一个事务中,执行后会回滚),然后回滚初始数据库设置。有什么想法让它以hibernate/spring/
Junit的方式工作?Hibernate是否有“删除所有表”等效命令?


问题答案:

您是否与特定的数据库供应商保持联系?如果没有,则可以使用内存数据库,例如HSQLDB。完成测试后,您只需放弃状态即可。仅当表在测试套件开始时可以为空(即在进行程序设置之前)时,才适用。

您仍然需要创建表,但是如果使用Hibernate完整地映射了所有内容,则可以使用hbm2ddl生成表。您所要做的就是将以下内容添加到 测试
会话工厂定义中:

<session-factory>
    ...
    <property name="hibernate.hbm2ddl.auto">create</property>
    ...
</session-factory>

如果该解决方案似乎适用,我可以对其进行详细说明。



 类似资料:
  • Im使用spring 3.0.7、JUnit 4.11和DBUnit 2.4.9。我试图在保存未指定多对一关系(设置为null)的实体时测试trowing异常。以下是实体: 我创建了以下测试: AbstractDatabaseTest扩展了AbstractTransactionalJUnit4SpringContextTests。 试验方法为: 但是当我做测试的时候 当我像这样将预期异常更改为Da

  • 问题内容: Hibernate不会删除我的行: 支出: 当我直接在SQL中尝试时,SQL语法有效。直接SQL语法: 对应: 表: 我想这很容易,因为到目前为止,对于我来说一切都还不错。我没有错误或其他任何事情,只是没有发生删除。 任何帮助表示赞赏。 问题答案: 您需要开始并提交事务。 还可能需要关闭会话,然后更改才能在数据库中可见。

  • 问题内容: 在application-context.xml中定义mongo存储库时遇到问题 以下是我在xml中得到的错误 我附上env的屏幕截图,以供参考。我正在使用eclipse Kepler版本和pom属性文件是这样的 Spring Data Commons版本是1.7 Spring Data Mongo DB版本1.4。打开上下文xml时,我在eclipse项目中看到错误。 有趣的是,我还

  • 我正在尝试创建具有一对一关系的域对象。A 是父母,B 是孩子。 我尝试了许多不同的方法来将删除从 A 级联到 B,但是当我查看数据库创建时,它没有设置 ON DELETE CASCADE。 有人能看到我做错了什么吗 答: 我知道CascadeType.ALL或孤儿移除应该有效果,但他们没有。 B: 有人能明白为什么它不级联删除吗?

  • 我想知道我应该怎么做,因为我读了很多文章试图理解这一点,包括很多问题。我读过的书中,没有一本是非常中肯的。 我想知道当使用级联规则以及应用程序定义数据库时会发生什么,因为这将定义我应该采用以下方法还是其他方法。 如果我现在对对象调用删除操作(无论是通过还是),会发生以下哪种情况? > hibernate操作将删除已加载到会话缓存中的所有相应条记录(可能是也可能不是实际数据库中存在的所有条记录),然

  • 我想从数据库中删除一条特定的记录。