两个模式共享一个 Hibernate 实体

One Hibernate Entity shared across Two Schemas

我在一个继承的和相当遗留的应用程序中工作,出于某种原因,它跨两个数据库模式工作,模式 A 和模式 K。用户选择一个“上下文”来操作,而上下文是,至少从表面上看,被认为是相同的,特征已经不同,并且数据库 table 在模式 A 中而不是在模式 K 中获得了新列。当然,每个模式都有一个 table 实体,但是模式 A 的列比模式 K 多一些。这就是问题所在。

存在一个罕见的错误,它与使用模式 A 的用户操作有关。但是,在设计错误的解决方案时,团队意识到该应用程序正在为模式 A 和模式 K 使用单个 Hibernate 实体。

是否可以在模式 A 的共享实体中注释一列,而不会在模式 K 中引入持久性错误?无法更改架构 K 以引入新列。

架构无法更改是什么意思?你能为此引入一个视图吗?问题是您不能映射其他架构中不存在的列,否则您会遇到问题。

如果您至少可以添加一个视图,则可以使用该视图而不是 table。数据库通常支持写入视图。至于其他模式中不存在的列,您有两种选择。将列标记为 insertable = false, updatable = false 以便您只能读取它们,或者使用 @DynamicUpdate 并确保在使用没有这些列的架构时不会更改这些列的值。

没有观点,我看你倒霉。您必须将两个 table 映射为不同的实体,每个实体都针对特定的模式。