Hibernate:hbm2ddl.auto value ="更新"或"无"

时间:2016-02-15 02:12:52

标签: hibernate jpa database-administration

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

在我的persistence.xml中,我将hibernate配置为更新架构,如下所示:

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

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

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

我认识的高级开发人员告诉我,第二种方法更好......因为这是DBA在所有好企业中所做的习惯..但我想要有更多解释......我想知道为什么第二种方法更好?为什么我们不应该让JPA管理表格及其自身的关系......

2 个答案:

答案 0 :(得分:2)

通常最好将aut ddl保留为none。 这是因为您可能会在开发之外的集成/生产环境中意外导致更新。 其次,来自hibernate的自动生成的脚本可能与dba使用的约定不一致。

答案 1 :(得分:1)

由于许多原因,这种情况并不好,特别是在生产环境中。

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

  • 脚本执行失败 - 在一个充满数据的数据库中,有一个alter table 添加非空列将失败,只是因为现有记录 没有这个专栏。因此,还有其他最佳处理步骤 手动

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

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