hibernate.hbm2ddl.auto Hibernate 如何决定何时创建或更新 ddl?

Posted

技术标签:

【中文标题】hibernate.hbm2ddl.auto Hibernate 如何决定何时创建或更新 ddl?【英文标题】:hibernate.hbm2ddl.auto how does Hibernate decide when to create or update the ddl? 【发布时间】:2012-03-09 15:46:16 【问题描述】:

我们在休眠和在 hsqldb 中自动创建 ddl 时遇到了一些问题。

我们使用

<property name="hibernate.hbm2ddl.auto" value="create-drop"/>

通常当我们更改映射对象时,hibernate 会自动在 db 上的模式中创建表,但有时它会拒绝这样做。在这种情况下,我们必须从文件系统中手动删除数据库,以说服 hibernate 重新创建所有表。

有人知道hibernate 是如何决定何时在数据库上重新创建数据模型的吗?我已经读过它决定何时创建 SessionFactory,但是说服 hiberbate 更新或创建表的确切条件是什么?

【问题讨论】:

如果它没有删除,可能是因为当时桌子上有一些锁或其他东西阻止了 Hibernate 删除它。 是的,这是我可以理解的,但是当我们删除模式并手动重新创建它时,我们也遇到了问题。所以架构是完全空的,因此我认为没有任何锁了。 我还将应用程序使用的架构更改为新的架构,hibernate 拒绝创建表。并且无需对应用程序进行任何进一步的更改,它在从文件系统中删除数据库后即可工作 Hibernate 调试日志中是否有任何内容表明它为什么会这样做? 【参考方案1】:

在你的休眠配置文件中你这个选项:

<property name="hbm2ddl.auto">update</property>

update 更改为create,或create-dropvalidate,whichever you want it to be。

或者,如果您的设置正确,但它没有按照您的预期执行,请检查日志消息,并在需要时提高日志记录级别。

【讨论】:

以上是关于hibernate.hbm2ddl.auto Hibernate 如何决定何时创建或更新 ddl?的主要内容,如果未能解决你的问题,请参考以下文章

hibernate.hbm2ddl.auto配置详解

hibernate.hbm2ddl.auto配置详解

hibernate.hbm2ddl.auto配置详解

hibernate.hbm2ddl.auto =创建(不创建表)

Hibernate、MySQL 视图和 hibernate.hbm2ddl.auto = 验证

hibernate.hbm2ddl.auto Hibernate 如何决定何时创建或更新 ddl?