Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate:hbm2ddl.auto值=";更新;或;无”;_Hibernate_Jpa_Database Administration - Fatal编程技术网

Hibernate:hbm2ddl.auto值=";更新;或;无”;

Hibernate:hbm2ddl.auto值=";更新;或;无”;,hibernate,jpa,database-administration,Hibernate,Jpa,Database Administration,我正在通过Hibernate使用JPA 在my persistence.xml中,我将hibernate配置为更新模式,如下所示: <property name="hibernate.hbm2ddl.auto" value="update"/> 是让JPA管理我们的数据库更好,还是让JPA自己(手动)管理数据库更好 我认识的高级开发人员对我说,第二种方法更好。。。因为这是DBA在所有优秀企业中的习惯。。但我想有更多的解释。。。我想知道为什么第二种方法更好?为什么我们不应该

我正在通过Hibernate使用JPA

在my persistence.xml中,我将hibernate配置为更新模式,如下所示:

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

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



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

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

由于许多原因,尤其是在生产环境中,这是不好的

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

  • 脚本执行失败-在充满数据的数据库中,一个alter表 添加一个非空列将失败,原因很简单,因为现有记录不这样做 我没有这个专栏。因此,还有一些额外的步骤是最好处理的 手动

  • 偶然的变化。您团队的开发人员可能会意外地 提交错误配置的实体并破坏您的模式

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

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