如何让 Hibernate 忽略不在实体中的表列?

Ale*_*exG 3 java spring entity-framework hibernate hibernate-mapping

我在 Spring MVC 和 Hibernate 中使用 Java。我有一堆实体,一切正常。但是,如果我将一列添加到我的数据库列之一,我的服务将开始崩溃,直到我还使用新列更新相关的 java 实体类。

有没有办法告诉 Hibernate 忽略它无法识别的数据库列?如果您希望实体中有一个不在您的数据库表中的字段,您可以在该字段上使用 @Transient。我想要相反的。

如果这是不可能的,那么在必须进行数据库更新时如何部署 Hibernate 服务?

Ger*_*cso 6

将新列添加到 Hibernate 管理的表后,Hibernate 不会“崩溃”。Hibernate 方案验证只会验证映射的列是否可以存储在数据库中,但不会在数据库中查找未映射的列。

可能导致您出现问题的是一个新的 NOT-null field。添加这样的字段将使 Hibernate 无法将任何内容持久保存到该表中,因为它不知道该字段的存在并且不会在插入时提供它。这个问题的解决方法是:

  • 为不使用此字段的客户端在更改表操作中提供 DEFAULT
  • 未将字段标记为非空并在另一层中执行可空性检查
  • 使用预插入触发器填充空字段
  • 或者,您甚至可以先添加新字段,部署新版本的应用程序,然后将新字段标记为非空。