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

Java 如何多次删除和创建模式?,java,jpa,eclipselink,Java,Jpa,Eclipselink,我试图在JUnit测试中使用JPA/EclipseLink(2.5.1)多次删除和创建表,方法是在多次实例化的EntityManager工厂上调用createEntityManager。但是,模式只被删除/创建一次。如何使EclipseLink每次都删除/创建模式 我的最终目标是使每个测试的db表处于已知状态(即空)。有更好的方法吗?对于您的应用程序来说可能有些过分,但我已经使用Liquibase来处理DB模式和表内容的版本控制。为JUnit代码绑定前/后钩子应该很简单。对于应用程序来说,这可能

我试图在JUnit测试中使用JPA/EclipseLink(2.5.1)多次删除和创建表,方法是在多次实例化的
EntityManager工厂上调用
createEntityManager
。但是,模式只被删除/创建一次。如何使EclipseLink每次都删除/创建模式


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

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

对于应用程序来说,这可能有些过分,但我已经使用Liquibase来处理DB模式和表内容的版本控制。为JUnit代码绑定前/后钩子应该很简单。

对于应用程序来说,这可能有些过分,但我已经使用Liquibase来处理DB模式和表内容的版本控制。为JUnit代码绑定前/后钩子应该很简单。

对于应用程序来说,这可能有些过分,但我已经使用Liquibase来处理DB模式和表内容的版本控制。为JUnit代码绑定前/后钩子应该很简单。

在每次测试运行时重新创建模式将大大降低测试速度。您只需要确保数据处于“已知状态”,在您的情况下,所有表都是空的。因此:

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

和/或

在每次测试运行之前,请查看可用于将数据库置于已知状态的DBUnit


在每次测试运行时重新创建模式将大大降低测试速度。您只需要确保数据处于“已知状态”,在您的情况下,所有表都是空的。因此:

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

和/或

在每次测试运行之前,请查看可用于将数据库置于已知状态的DBUnit


在每次测试运行时重新创建模式将大大降低测试速度。您只需要确保数据处于“已知状态”,在您的情况下,所有表都是空的。因此:

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

和/或

在每次测试运行之前,请查看可用于将数据库置于已知状态的DBUnit


在每次测试运行时重新创建模式将大大降低测试速度。您只需要确保数据处于“已知状态”,在您的情况下,所有表都是空的。因此:

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

和/或

在每次测试运行之前,请查看可用于将数据库置于已知状态的DBUnit


对于日食,我曾经

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

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

  "DELETE from EntityName entity"

在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");
然后

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

  "DELETE from EntityName entity"

在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");
然后

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

  "DELETE from EntityName entity"

在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");
然后

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

  "DELETE from EntityName entity"

你是怎么做到的?这样人们就知道该评论什么了。为每个测试创建一个新的EMF?JPA2.1具有在EMF创建时执行drop+create的属性(如果是这种情况),您是如何做到这一点的?这样人们就知道该评论什么了。为每个测试创建一个新的EMF?JPA2.1具有在EMF创建时执行drop+create的属性(如果是这种情况),您是如何做到这一点的?这样人们就知道该评论什么了。为每个测试创建一个新的EMF?JPA2.1具有在EMF创建时执行drop+create的属性(如果是这种情况),您是如何做到这一点的?这样人们就知道该评论什么了。为每个测试创建一个新的EMF?JPA2.1具有在EMF创建时执行drop+create的属性,如果是这种情况,我最终实现了在每次测试之前将db置于“已知状态”的概念,即从所有表中删除数据。我查看了DBUnit,但没有发现从所有表中删除所有数据的概念。我最终直接使用Jdbc来实现在每次测试之前将数据库置于“已知状态”的概念,即在我的例子中,从所有表中删除数据。我查看了DBUnit,但没有发现从所有表中删除所有数据的概念。我最终直接使用Jdbc来实现在每次测试之前将数据库置于“已知状态”的概念,即在我的例子中,从所有表中删除数据。我查看了DBUnit,但没有发现从所有表中删除所有数据的概念。我最终直接使用Jdbc来实现在每次测试之前将数据库置于“已知状态”的概念,即在我的例子中,从所有表中删除数据。我查看了DBUnit,但没有发现删除所有