【发布时间】: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