Hibernate hbm2ddl是用来创建,更新或者验证数据库sehema的工具,它会读取Hibernate mappings configuration(*.hbm)自动生成SQL脚本。Hibernate框架实现了JPA,项目里的*.hbm由annotation代替,所以hibernate的项目不一定都有*.hbm。好消息是hbm2ddl也支持JPA,它会分析annotation,然后生成对应的脚本。
另外命令行和Ant都能调用hbm2ddl。
hibernate.hbm2ddl.auto有四个固定选项:create, create-drop, update,validate
5
四个选项的用途
create
当entity manager factory被创建时候自动创建数据库,如果根目录存在一个import.sql,Hibernate会执行的这个SQL。值得注意的是执行SQL之前都是先删除原先的schema,包括表,约束等等。
create-drop
它包含两个功能create和drop,create同前面的create。
drop功能,当entity manager factory被关闭时,schema也会跟着删除。
update
根据项目里的*.hbm或者JPA Entity生成更改SQL脚本, 然后执行该脚本修改数据库结构。update是不会执行import.sql,所以他只修改结构,不会执行import.sql。有可能会执行失败,比如添加一个不能为null的列到已经包含有数据的表中。
validate
根据项目里的*.hbm或者JPA Entity验证schemm,不更改schema也不会执行import.sql。
Mode | Reads import.sql | Alters Database Structure | Comments |
update | No | Yes | |
create | Yes | Yes | Empties the database before creating it |
create-drop | Yes | Yes | Drops the database when the SessionFactory is closed |
validate | No | No |