今天在学习Hibernate的时候,通过JavaBean实体类和hbm映射文件自动创建数据库表,实体类和对象关系映射文件写的都没有错误,运行时也不报错,但是就是没生成数据库表,查了半天才发现是因为 hibernate.cfg.xml文件中缺少了一个自动创建数据库表的语句:
<property name="hibernate.hbm2ddl.auto">update</property>
因此,如果选择使用Hibernate官方推荐的通过对象和关系映射文件生成数据库表的方式进行开发,一定不要忘记在hibernate.cfg.xml文件中加上个语句。
hibernate.hbm2ddl.auto 是Hibernate的一个属性,有四个值:create,create-drop,update,validate;
各自的具体含义如下:
<!-- 启动时删数据库中的表,然后创建,退出时不删除数据表
< property name="hibernate.hbm2ddl.auto">create</property>-->
< !-- 启动时删数据库中的表,然后创建,退出时自动删除所有表
< property name="hibernate.hbm2ddl.auto">create-drop</property>-->
< !-- 自动修改,如果表结构与实体类不一致,那么就修改表使它们一致,数据会保留
< property name="hibernate.hbm2ddl.auto">update</property>-->
< !-- 自动校验,如果表结构与实体类不一致,那么不做任何操作,报错
< property name="hibernate.hbm2ddl.auto">validate</property>-->
本来这个属性的产生是为了测试数据的,我觉得利用这个自动建表非常方便。利用这段代码:
< property name="hibernate.hbm2ddl.auto">create</property>
但是,在实际开发中却会碰到无法自动创建数据库表的情况,其中一种情况是:由于实体类的属性中出现了sql关键字,hibernate将不会生成ddl来创建表结构。