请耐心等待。我试图解开我在过去几天看到的一个谜。
我有以下情况。我有一张名为" Bar"有三列作为" A"," B"和" C"在oracle DB中。请参考图1.
我部署了新的DDL来改变它的数据结构,以便它有列#34; A"和" D" (放弃" B"和" C")。请参考图2.
现在我有一个Web应用程序(JSF + Spring Data JPA + Hibernate),它有一个名为" Bar.java"的Java实体域对象。它映射到表格" Bar"。但是,该实体模型的字段尚未更新。它仍然有" A"," B"和" C"字段(列)。如果我将应用程序部署到app服务器(例如weblogic),那么hibernate框架会通过添加" 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),后者又更新了一个表。
答案 0 :(得分:1)
hibernate有配置选项hibernate.hbm2ddl.auto,包含可能的选项列表:
验证:验证架构,不对数据库进行任何更改。
更新:更新架构。
create:创建架构,销毁以前的数据。
create-drop:在SessionFactory出现时删除模式 显式关闭,通常是在应用程序停止时。
有人可以使用hibernate.hbm2ddl.auto = update运行appilcation并添加所有columnts(表)