hibernate - 一个 Hibernate Entity 跨两个 Schema 共享
问题描述
我在一个继承的和相当遗留的应用程序中工作,出于某种原因,它跨两个数据库模式工作,模式 A 和模式 K。用户选择一个“上下文”来操作,而上下文至少表面上是被考虑的相同的是,功能有所不同,并且数据库表在模式 A 中而不是在模式 K 中获得了新列。当然,每个模式都有一个实体表,但模式 A 比模式 K 多一些列。而这是摩擦。
存在一个罕见的错误,并且与使用 Schema A 的用户操作有关。然而,在设计该错误的解决方案时,团队意识到该应用程序对 Schema A 和 Schema K 都使用单个 Hibernate 实体。
是否可以在模式 A 的共享实体中注释不会在模式 K 中引入持久性错误的列?无法更改模式 K 以引入新列。
解决方案
你是什么意思架构不能改变?你能为此目的介绍一个观点吗?问题是不能映射其他模式中不存在的列,否则会遇到问题。
如果您至少可以添加一个视图,则可以使用该视图而不是表格。数据库通常支持写入视图。至于其他模式中不存在的列,您有两个选择。将列标记为insertable = false, updatable = false
只能读取它们,或者使用@DynamicUpdate
并确保在使用没有这些列的架构时不会更改这些列的值。
没有视野,就我所见,你很不走运。您必须将两个表映射为不同的实体,每个实体都针对特定的模式。
推荐阅读
- python - 使用 Python 删除 FASTA 中的重复序列
- c# - 按时间顺序在列表中插入对象
- python - 不使用 if 语句的数字比较
- arm - 在 arm64 GICv3 中捕获 IRQ 的步骤?
- internet-explorer-11 - 适合对象:封面和 IE11
- powershell - -WhatIf 控制台返回的更多详细信息?
- sql - SQL中的where子句条件
- db2 - 用于 DB2 表 REORG 调用的 flyway 的生产部署步骤
- c# - INSERT 语句与 net core 中的 FOREIGN KEY 约束冲突
- c - 为什么这个简单的代码不等待学生姓名(由用户输入)?