5

我知道添加 "hbm2ddl.auto"=create Hibernate 将创建自动从 hbm / 注释读取映射的表。请让我知道,如果这是一个很好的做法,为什么?

4

2 回答 2

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>);

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

-Dprofile=development

或者

-Dprofile=production

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

于 2010-09-21T04:17:56.910 回答
2

我一直以这种方式使用 Hibernate。只要您使用的任何 API 都可以以合理的方式与其交互(而且大多数都可以),当 Hibernate 可以为您完成所有这些工作时,我认为没有理由自己完成所有工作。

这就是像 Hibernate 这样的框架的好处。它们为您节省了大量时间,它们通常有据可查,其他一切都旨在与它们“玩得开心”。你所要做的就是相信他们:)

于 2010-09-21T04:42:40.777 回答