我知道添加 的 “hbm2ddl.auto”=创建 Hibernate会自动创建表,从hbm / annotation中读取映射。如果这是一个很好的做法,请告诉我,为什么?
答案 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这样的框架来说是件好事。它们为您节省了大量时间,它们通常都有很好的文档记录,而其他所有内容都旨在与它们“玩得很好”。你所要做的就是信任他们:)