Hibernate:hbm2ddl.auto值=";更新;或;无”;
我正在通过Hibernate使用JPA 在my persistence.xml中,我将hibernate配置为更新模式,如下所示: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在所有优秀企业中的习惯。。但我想有更多的解释。。。我想知道为什么第二种方法更好?为什么我们不应该
<property name="hibernate.hbm2ddl.auto" value="update"/>
是让JPA管理我们的数据库更好,还是让JPA自己(手动)管理数据库更好
我认识的高级开发人员对我说,第二种方法更好。。。因为这是DBA在所有优秀企业中的习惯。。但我想有更多的解释。。。我想知道为什么第二种方法更好?为什么我们不应该让JPA管理表格和它自己的关系 通常最好将aut ddl保留为none。 这是因为您可能会意外地导致集成/生产环境(而非开发环境)中的更新。
其次,从hibernate自动生成的脚本可能与dba使用的约定不一致。由于许多原因,尤其是在生产环境中,这是不好的
- 版本控制-大多数人都希望对数据库进行版本控制 通过手动跟踪数据库更改,最好为每个更改准备一个还原脚本。在版本发布中,重要的是 万一情况变坏时的回滚计划
- 脚本执行失败-在充满数据的数据库中,一个alter表 添加一个非空列将失败,原因很简单,因为现有记录不这样做 我没有这个专栏。因此,还有一些额外的步骤是最好处理的 手动
- 偶然的变化。您团队的开发人员可能会意外地 提交错误配置的实体并破坏您的模式
validate
,这样可以根据数据库结构验证实体映射,如果存在任何不匹配,hibernate将发出警告
<property name="hibernate.hbm2ddl.auto" value="none"/>