nhibernate中hbm2ddl.auto/hbm2ddl.keywords参数配置详解

hibernate.cfg.xml 中hibernate.hbm2ddl.auto配置节点如下:


<property name="hbm2ddl.auto">create-drop</property>
  • update : auto execute SchemaUpdate on BuildSessionFactory
  • create : auto execute SchemaExport on BuildSessionFactory
  • create-drop : auto execute SchemaExport on BuildSessionFactory recreating the schema
  • validate : auto execute SchemaValidator on BuildSessionFactory

hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构。如果不是此方面的需求建议set value="none"

 

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

 

 

create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就导致了数据库表数据丢失。

create-drop :每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
validate :每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

 

<property name="hbm2ddl.keywords">auto-quote</property>
  • none : disable any operation regarding RDBMS KeyWords
  • keywords : (activated by Default)imports all RDBMS KeyWords where the NH-Dialect can provide the implementation of IDataBaseSchema (so far available for MsSQL, Oracle, Firebird, MsSqlCe, MySQL, SQLite, SybaseAnywhere)
  • auto-quote : imports all RDBMS KeyWords and auto-quote all table-names/column-names on BuildSessionFactory

备注:

当我们把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比较好,只验证表结构是否正确。而数据表结构手动来生成。

 

 

 

你可能感兴趣的:(Hibernate)