【问题标题】: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
- 未将字段标记为非空并在另一层执行可空性检查
- 使用预插入触发器填充空字段
- 或者,您甚至可以先添加新字段,部署新版本的应用程序,然后将新字段标记为非空。