`
run_wang
  • 浏览: 162479 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

hibernate.cfg.xml 中hibernate.hbm2ddl.auto配置节点

 
阅读更多
hibernate.cfg.xml 中hibernate.hbm2ddl.auto配置节点如下:
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
</properties>

在JBPM4中就有这么一个参数配置,JBPM需要创建自己的一些基础表,所以不管你用哪个数据库,运行jbpm的实例后,Hibernate都会根据这个参数配置和pojo类取自动创建对应的表结构。

其实这个hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构。如果不是此方面的需求建议set value="none"。
create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就导致了数据库表数据丢失。


create-drop :每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。


update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。


validate :每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。



再说点“废话”:
当我们把hibernate.hbm2ddl.auto=create时hibernate先用hbm2ddl来生成数据库schema。
当我们把hibernate.cfg.xml文件中hbm2ddl属性注释掉,这样我们就取消了在启动时用hbm2ddl来生成数据库schema。通常只有在不断重复进行单元测试的时候才需要打开它,但再次运行hbm2ddl会把你保存的一切都删除掉(drop)---- create配置的含义是:“在创建SessionFactory的时候,从scema中drop掉所以的表,再重新创建它们”。
注意,很多Hibernate新手在这一步会失败,我们不时看到关于Table not found错误信息的提问。但是,只要你根据上面描述的步骤来执行,就不会有这个问题,因为hbm2ddl会在第一次运行的时候创建数据库schema,后续的应用程序重启后还能继续使用这个schema。假若你修改了映射,或者修改了数据库schema,你必须把hbm2ddl重新打开一次。



一般情况下不建议使用hibernate.hbm2ddl.auto的创建或修改方式,可以把hibernate.hbm2ddl.auto的value置为none,或者置为validate比较好,只验证表结构是否正确。而数据表结构手动来生成。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics