首页 > 解决方案 > 一个 Hibernate Entity 跨两个 Schema 共享

问题描述

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

存在一个罕见的错误,并且与使用 Schema A 的用户操作有关。然而,在设计该错误的解决方案时,团队意识到该应用程序对 Schema A 和 Schema K 都使用单个 Hibernate 实体。

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

标签: hibernatehibernate-mapping

解决方案


你是什​​么意思架构不能改变?你能为此目的介绍一个观点吗?问题是不能映射其他模式中不存在的列,否则会遇到问题。

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

没有视野,就我所见,你很不走运。您必须将两个表映射为不同的实体,每个实体都针对特定的模式。


推荐阅读