我想定义我的对象,然后使用 hibernate 从中生成我的 ddl。但似乎使用 hibernate 的唯一真正工作流程是生成数据库模式,然后对其进行逆向工程。我想做一些没有意义的事情吗?
2 回答
是的,有一个属性hibernate.hbm2ddl.auto
。文档说:
创建 SessionFactory 时自动验证模式 DDL 或将其导出到数据库。使用 create-drop,当 SessionFactory 显式关闭时,数据库模式将被删除。
例如验证 | 更新 | 创建 | 创建删除
有多种方法可以定义此属性,具体取决于您如何配置SessionFactory
. 休眠方式是简单地添加:
<property name="hibernate.hbm2ddl.auto">update</property>
但似乎使用 hibernate 的唯一真正工作流程是生成数据库模式,然后对其进行逆向工程。
不,绝对不是。从历史上看,Hibernate 支持几种方法:
自上而下:您从对象模型开始,然后使用 XML 文件或注释创建映射元数据,然后使用 Hibernate 的
hbm2ddl
工具生成模式。自下而上: 您从现有数据库开始,并使用
hbm2hbmxml
和从数据库模式生成映射和 Java 类(或只是带注释的 Java 类)hbm2java
。中间:您开始编写 Hibernate XML 映射并分别使用 和 生成 DDL 和 Java
hbm2ddl
类hbm2java
。在中间相遇:您有一个现有的 Java 模型和一个现有的数据库。Hibernate 工具在这里帮不上什么忙,您很可能不得不手动编写映射并对数据库或 Java 代码进行一些重构,或者使用某种桥接器。这是最坏的情况。
因此,正如我们所见,Hibernate 支持多种工作流程并为它们提供工具。在您的情况下,您正在寻找名为hbm2ddl
(也称为SchemaExport
,这是实现它的类的名称)的工具。有几种使用方法:
- 您可以以
SchemaExport
编程方式运行。 - 您可以通过将属性设置为适当的值来在
SessionFactory
创建时启用架构的自动导出hibernate.hbm2ddl.auto
- 您可以使用
<hbm2ddl>
Ant 任务
参考
- Hibernate 核心参考指南
- Hibernate 工具参考指南