【问题标题】:Would hibernate framework alter the table structure?hibernate框架会改变表结构吗?
【发布时间】:2017-06-15 17:38:34
【问题描述】:

请多多包涵。我正试图解开我在过去几天看到的一个谜。

我有以下情况。我在 oracle DB 中有一个名为“Bar”的表,其中三列分别为“A”、“B”和“C”。请参考图一。

我部署了新的 DDL,更改了它的数据结构,使其具有“A”和“D”列(删除“B”和“C”)。请参考图2。

现在我有一个 Web 应用程序(JSF + Spring Data JPA + Hibernate),它具有名为“Bar.java”的 Java 实体域对象,它映射到表“Bar”。但是,此实体模型的字段尚未更新。它仍然有“A”、“B”和“C”字段(列)。如果我将应用程序部署到应用程序服务器(例如 weblogic),休眠框架会通过添加回“A”、“B”和“C”列来更改实际表吗?请参考图3。

图 1。

+-----------+
| A | B | C |
+-----------+

图 2。

+-------+
| A | D |
+-------+

图 3。

+---------------+
| A | B | C | D |
+---------------+

在我所在的商店中,有多个开发人员一起工作,有时他们的本地工作分支没有其他人的最新提交。我正在调查为什么表格“Bar”不断被改变。假设我验证了表格在图 2。昨天的状态,但今天早上它切换到图 3。

我的猜测是一些开发人员工作分支仍然有旧的实体模型并且他/她不知道它,在他们的代码部分工作,部署应用程序并且表被更改并且在应用程序服务器中引发异常。

有人可以验证这个假设吗?

[更新]

John Bollinger 和 sbjavateam 是对的。我找到了一个包含 hibernate.hbm2ddl.auto = update 的 xml(不是 persistence.xml),它又更新了一个表。

【问题讨论】:

  • Hibernate 有一个特性,如果你启用它,它将在部署时根据需要更新你的数据库模式以支持你的实体模型。有关详细信息,请参阅hibernate.hbm2ddl.auto possible values and what they do
  • @John Bolligner:感谢您的回复。请问您是否知道(xml 文件?)设置该键/值对的位置?
  • persistence.xml 文件
  • @fg78nc:感谢您的回复。确实我找到了文件。
  • 我不认为在休眠配置文件中启用了 hibernate.hbm2ddl.auto。我发现的唯一标签是持久性单元。

标签: java spring oracle hibernate


【解决方案1】:

hibernate 具有配置选项 hibernate.hbm2ddl.auto 以及可能的选项列表:

validate:验证架构,不对数据库进行任何更改。

更新:更新架构。

create:创建架构,销毁以前的数据。

create-drop:当 SessionFactory 为 显式关闭,通常在应用程序停止时。

有人可以使用 hibernate.hbm2ddl.auto=update 运行应用程序,所有列(表)都将被添加

【讨论】:

  • :谢谢您的解释。我从项目文件夹中检查了 persistnece.xml 文件,但没有看到提到的键/值对。
  • 我接受 John Bollinger 和 sbjavateam 提供的答案,即使我没有从 xml 文件中看到该键/值对,他们确实回答了我的假设/问题“可以休眠改变表”通过提及 hibernate.hbm2ddl.auto 配置选项。
  • 我发现了hibernate.hbm2ddl.auto。它被设置为“更新”。我打算把它改成“验证”。
猜你喜欢
  • 1970-01-01
  • 2012-09-18
  • 2012-11-11
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
相关资源
最近更新 更多