Java 如何在生产环境中为hibernate.hbm2ddl.auto使用不同的值

Java 如何在生产环境中为hibernate.hbm2ddl.auto使用不同的值,java,jpa,jakarta-ee,deployment,persistence,Java,Jpa,Jakarta Ee,Deployment,Persistence,在Java EE应用程序中,我总是使用以下选项配置我的persistence.xml文件: <property name="hibernate.hbm2ddl.auto" value="create-drop"> 这对于测试来说非常方便。当我提交代码时,persistence.xml将与此配置一起提交。但是,当我部署到生产环境时,我不想删除我的数据库 如何克服这个问题?对于企业应用程序,永远不要使用hibernate.hbm2ddl.auto。最好同时用于生产测试和集成测试 也

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

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

这对于测试来说非常方便。当我提交代码时,persistence.xml将与此配置一起提交。但是,当我部署到生产环境时,我不想删除我的数据库


如何克服这个问题?

对于企业应用程序,永远不要使用
hibernate.hbm2ddl.auto
。最好同时用于生产测试和集成测试

也就是说,即使使用像H2这样的内存中的DB也是不可取的。如果将数据文件夹映射到上,则可以在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>
而对于开发配置文件(默认),该值为:

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

谢谢,Flyway似乎是最干净的选择!