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

时间:2010-09-21 03:54:56

标签: hibernate schema creation

我知道添加     的 “hbm2ddl.auto”=创建 Hibernate会自动创建表,从hbm / annotation中读取映射。如果这是一个很好的做法,请告诉我,为什么?

2 个答案:

答案 0 :(得分:3)

如果您在测试环境中使用它(如果可能,通过使用内存数据库,例如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

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

答案 1 :(得分:1)

我总是以这种方式使用Hibernate。只要您正在使用的任何API都能以合理的方式与其进行交互(并且大多数都可以),我认为没有理由在Hibernate为您完成所有工作时自行完成所有工作。

这对于像Hibernate这样的框架来说是件好事。它们为您节省了大量时间,它们通常都有很好的文档记录,而其他所有内容都旨在与它们“玩得很好”。你所要做的就是信任他们:)