Java hibernate框架会改变表结构吗?

Java hibernate框架会改变表结构吗?,java,spring,oracle,hibernate,Java,Spring,Oracle,Hibernate,请容忍我。我正试图解开过去几天我所看到的一个谜 我有一个下面的场景。我有一个名为“Bar”的表,在oracledb中有三列,分别为“a”、“B”和“C”。请参考图1 我部署了新的DDL,更改了它的数据结构,使其列为“A”和“D”(删除“B”和“C”)。请参考图2 现在我有了一个web应用程序(JSF+SpringDataJPA+Hibernate),它有一个名为“Bar.java”的java实体域对象,该对象映射到表“Bar”。但是,此实体模型的字段尚未更新。它仍然有“A”、“B”和“C”字段(

请容忍我。我正试图解开过去几天我所看到的一个谜

我有一个下面的场景。我有一个名为“Bar”的表,在oracledb中有三列,分别为“a”、“B”和“C”。请参考图1

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

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

图1

+-----------+
| A | B | C |
+-----------+
图2

+-------+
| A | D |
+-------+
图3

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

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

有人能证实这个假设吗

[更新]


约翰·博林格的团队是对的。我找到了一个包含hibernate.hbm2ddl.auto=update的xml(而不是persistence.xml),它反过来会更新一个表。

hibernate有一个配置选项hibernate.hbm2ddl.auto,其中包含可能的选项列表:

验证:验证架构,不更改数据库

更新:更新模式

创建:创建模式,销毁以前的数据

createdrop:当SessionFactory为 显式关闭,通常在应用程序停止时关闭


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

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

验证:验证架构,不更改数据库

更新:更新模式

创建:创建模式,销毁以前的数据

createdrop:当SessionFactory为 显式关闭,通常在应用程序停止时关闭


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

hibernate有一个功能,如果启用它,将在部署时根据需要更新数据库架构,以支持实体模型。有关更多信息,请参阅。@John Bollinger:谢谢您的回复。请问您是否知道(xml文件?)在哪里设置键/值对?persistence.xmlfile@fg78nc:谢谢你的答复。我确实找到了这个文件。我不认为hibernate.hbm2ddl.auto在hibernate配置文件中是启用的。我找到的唯一标记是persistence-unit.Hibernate有一个特性,如果您启用它,它将在部署时根据需要更新您的数据库模式,以支持您的实体模型。有关更多信息,请参阅。@John Bollinger:谢谢您的回复。请问您是否知道(xml文件?)在哪里设置键/值对?persistence.xmlfile@fg78nc:谢谢你的答复。我确实找到了这个文件。我不认为hibernate.hbm2ddl.auto在hibernate配置文件中是启用的。我找到的唯一标记是持久性单位。:谢谢你的解释。我检查了项目文件夹中的persistence.xml文件,但没有看到提到的键/值对。我接受John Bollinger和sbjavateam提供的答案,尽管我没有看到xml文件中的键/值对,但他们确实回答了我的假设/问题“hibernate可以改变表吗?”“通过提到hibernate.hbm2ddl.auto配置选项,我发现hibernate.hbm2ddl.auto。它被设置为“更新”。我计划将其更改为“验证”。:谢谢您的解释。我检查了项目文件夹中的persistence.xml文件,但没有看到提到的键/值对。我接受John Bollinger和sbjavateam提供的答案,尽管我没有看到xml文件中的键/值对,但他们确实回答了我的假设/问题“hibernate可以改变表吗?”“通过提到hibernate.hbm2ddl.auto配置选项,我发现hibernate.hbm2ddl.auto。它被设置为“更新”。我计划将其更改为“验证”。