让 Hibernate 使用 <property name="hbm2ddl.auto">create</property> 自动创建表是一个好习惯吗?

Vaa*_*ndu 5 schema hibernate creation

我知道添加 "hbm2ddl.auto"=create Hibernate 将创建自动从 hbm / 注释读取映射的表。请告诉我这是否是一个值得遵循的好习惯,为什么?

Art*_*ald 4

如果您在测试环境中使用它(如果可能,通过使用内存数据库,例如h2 - 是的,它只是一个单一的jar文件),这可能是一个好主意(确保您没有任何与生产相关的文件)设置)

从 Hibernate In Action 书中检索到的建议也可以应用:

我们已经看到 Hibernate 用户尝试使用 SchemaUpdate 自动更新生产数据库的架构。这很快就会导致灾难,并且您的 DBA 不会允许这种情况

如果你只是想生成模式,更喜欢使用SchemaExport(hbm2ddl幕后的类)

AnnotationConfiguration configuration = new AnnotationConfiguration();

configuration
.addAnnotatedClass(<TYPE_YOUR_CLASS>.class)
.setProperty(Environment.USER, <TYPE_YOUR_USER>)
.setProperty(Environment.PASS, <TYPE_YOUR_PASSWORD>)
.setProperty(Environment.URL, <TYPE_YOUR_URL>)
.setProperty(Environment.DIALECT, <TYPE_YOUR_DIALECT>)
.setProperty(Environment.DRIVER, <TYPE_YOUR_DRIVER>);

SchemaExport schema = new SchemaExport(configuration);
schema.setOutputFile("schema.sql");

schema.create(<DO_YOU_WANT_TO_PRINT_TO_THE_CONSOLE>, <DO_YOU_WANT_TO_EXPORT_THE_SCRIPT_TO_THE_DATABASE>);
Run Code Online (Sandbox Code Playgroud)

您还可以根据目标机器启用Java属性

-Dprofile=development
Run Code Online (Sandbox Code Playgroud)

或者

-Dprofile=production
Run Code Online (Sandbox Code Playgroud)

这里展示了一种方法(虽然它使用 Spring,但 Spring 内置了对 Hibernate 的支持)