在我的Java EE应用程序中,我总是使用以下选项配置persistence.xml文件:

<property name="hibernate.hbm2ddl.auto" value="create-drop">


测试非常方便。提交代码时,将使用此配置提交persistence.xml。但是,当我部署到生产环境时,我不想删除数据库。

如何克服这个问题?

最佳答案

切勿将hibernate.hbm2ddl.auto用于企业应用程序。如果同时使用Flyway进行生产和集成测试,则更好。

话虽如此,甚至不希望使用像H2这样的内存数据库。如果按照this article中的说明在tmpfs上映射数据文件夹,则可以在MySQL和PostgreSQL上几乎与H2一样快地运行集成测试。

因此,回到您的问题。如果确实只需要在测试环境中而不是在生产环境中重新创建表,则需要对hibernate.hbm2ddl.auto属性使用Maven参数:

<property name="hibernate.hbm2ddl.auto" value="${hbm2ddl.value}">


对于生产资料,值是:

<hbm2ddl.value>none</hbm2ddl.value>


而对于开发配置文件(默认),该值为:

<hbm2ddl.value>create-drop</hbm2ddl.value>

09-25 21:05