休眠:hbm2ddl.auto 值="update" 或 "none"

Hibernate : hbm2ddl.auto value="update" or "none"

我正在通过 Hibernate 使用 JPA...

在我的 persistence.xml 中,我将休眠配置为按如下方式更新模式:

 <property name="hibernate.hbm2ddl.auto" value="update"/>

是让 JPA 管理我们的数据库更好还是我们自己(手动)管理数据库更好...

   <property name="hibernate.hbm2ddl.auto" value="none"/>

我认识的资深开发人员对我说第二种方法更好...因为这是所有优秀企业中 DBA 的习惯..但我想得到更多解释...我想知道为什么第二种方法更好?为什么我们不应该让 JPA 自己管理表和关系...

通常最好将 aut ddl 留给 none。 这是因为您可能会不小心导致 integration/production 环境而非开发环境中的更新。 其次,hibernate 自动生成的脚本可能与 dba 使用的约定不一致。

它不是很好,原因有很多,尤其是在生产环境中。

  • 版本控制 - 您可能希望对数据库进行版本控制,大多数人都这样做 通过手动跟踪数据库更改,最好为每个更改准备一个还原脚本。重要的是版本发布有 万一事情变坏的回滚计划。

  • 脚本执行失败 - 在充满数据的数据库中,一个 alter table which 添加一个非空列将失败,仅仅是因为现有记录 没有这个专栏。所以还有一些最好处理的额外步骤 手动。

  • 意外更改。您团队中的开发人员可能会不小心 提交错误配置的实体并对您的架构造成严重破坏。

最好是保持 hibernate 的值。hbm2ddl.auto 到 validate,这样实体映射会根据数据库结构进行验证,如果有任何不匹配,Hibernate 会发出警告。