【问题标题】:How to get Hibernate to ignore table columns not in entity?如何让 Hibernate 忽略不在实体中的表列?
【发布时间】:2015-12-01 21:15:51
【问题描述】:

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

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

如果这是不可能的,那么当需要同时更新数据库时,如何部署 Hibernate 服务?

【问题讨论】:

    标签: java spring entity-framework hibernate hibernate-mapping


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      相关资源
      最近更新 更多