如何多次删除和创建模式?

时间:2014-10-28 18:30:47

标签: java jpa eclipselink

我试图在JUnit测试中多次使用JPA / EclipseLink(2.5.1)来删除和创建表,方法是在多次createEntityManager实例化上调用EntityManagerFactory。但是,架构仅被删除/创建一次。如何让EclipseLink每次都删除/创建模式?

我的最终目标是让每个测试的db表处于已知状态(即空)。有没有更好的方法呢?

3 个答案:

答案 0 :(得分:2)

使用EclipseLink,我使用了

properties.put("eclipselink.ddl-generation", "drop-and-create-tables");
properties.put("eclipselink.ddl-generation.output-mode", "database");
properties.put("eclipselink.deploy-on-startup", "true");

然后

JpaHelper.getEntityManagerFactory(em).refreshMetadata(properties);

这将删除并重新创建持久性单元中所有实体的表。正如其他地方所提到的,多次调用这种方法很昂贵 - 最好使用JPA批量删除查询在测试之前/之后清除数据:

  "DELETE from EntityName entity"

答案 1 :(得分:1)

在每次测试运行时重新创建架构会大大减慢测试速度。您只需要确保您的数据处于“已知状态”,在您的情况下所有表都为空。所以:

在标记为“仅回滚”的事务中运行测试,以便数据库在每次执行后返回到已知状态。

和/或

查看DBUnit,您可以使用它在每次测试运行之前将数据库置于已知状态。

http://dbunit.sourceforge.net/index.html

http://dbsetup.ninja-squad.com/

答案 2 :(得分:0)

对于您的应用程序可能有点过分,但我使用Liquibase来处理数据库模式和表内容的版本控制。为JUnit代码绑定前/后挂钩应该很简单。