最近团队同事在配置文件上用到了hibernate.hbm2ddl.auto,把配置文件下关联的bean对应的数据表给清空了,问题不算很严重影响也只是开发测试环境的数据,可是也需要自己记录下吧。虽然现在很多公司越来越少用到Hibernate.而转到Mybatis,但是自己现在维护开发的两个系统项目都用到hibernate,避免犯错误,因为恢复这几个表都弄了快一天..心累的底层开发仔...
前言
我们在本地作开发时或者项目刚开始时,经常会定义好实体,继而在相应的数据库中建表。而这样建表继烦琐,浪费时间,又容易出错。而这时候Hibernate的hibernate.hbm2ddl.auto配置项会帮助我们根据定义好的实体,自动创建,更新,验证数据库表...
hibernate.cfg.xml 中hibernate.hbm2ddl.auto配置节点如下:
<properties> <!-- 没有必要的话,最好注销此函数 --> <property name="hibernate.hbm2ddl.auto" value="create" /> </properties>
hibernate.hbm2ddl.auto有好几个属性项:
1.none(默认)
在Hiberante启动时,不会执行任何操作
2.create-only
在Hibernate启动时,对实体仅会执行建表语句,即使实体对应的表已经存在了,也会重复执行建表语句
3.drop
在Hiberante启动时,对实体对应的表执行删除语句,即使实体不存在对应的表,都会执行表删除语句
4.create
在Hiberante启动时,对实体对应的表执行删除语句,然后再执行建表语句
5.create-drop
在Hibernate启动时,对实体对应的表执行删除语句,然后执行建表语句。在Hibernate关闭时,实体对应的表执行删除语句
6.validate
对实体和对应的表进行校验
7.update
实体对应的表如果不存在则会创建。如果实体中新增加了字段,会在相应的表中增加一列
怎么多参数,以前学习Hibernate时候,自己用到就以下几个:
validate:每次加载hibernate时,验证创建数据库表结构
create:每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因
create-drop:每次加载hibernate时创建,退出则是删除表结构
update:每次加载hibernate时更新表,不存在则创建,省去了手动更新数据库表的麻烦(此时事故原因)
ps:hibernate.hbm2ddl.auto配置项会对这个配置文件下所有的映射表都起作用!!!!!(慎用)
总结
1.请慎重使用hibernate.hbm2ddl.auto,没必要就不要随便用
2.如果发现数据库表丢失,请检查配置了hibernate.hbm2ddl.auto
3.一般情况下都是使用validate或者update。 如果希望基于代码来构建数据库表结构,就可以使用update.其余的选项使用较少,尤其会删除掉数据库中的数据