繁体   English   中英

休眠/JPA Inheritance class 更改

[英]Hibernate/JPA Inheritance class change

嗨,我有一个 Spring 项目,我正在使用 sql 将所有内容从我的手工持久层迁移到 Hibernate/JPA ORM。

我面临以下情况:我有一个AbstractUser class、一个SimpleUser和一个ProviderUser Simple 和 Provider 扩展了 AbstractUser 的形式。 Provider 与 SimpleUser 的区别在于,第一个具有额外的字段和实体,而第二个没有。 我使用@Inheritance(strategy = InheritanceType.SINGLE_TABLE)到 map 我的 inheritance 并且一切运行顺利。

问题是我不知道如何管理将 SimpleUser 升级为 Provider 的操作。 我想到了两件事:

  1. 从数据库中删除实体并使用 Provider 实现创建一个新实体。
  2. 将 SimpleUser 的 DiscriminatorColumn 值更改为引用 Provider 的值。

我真的认为这两种方法都不正确,但它们确实有效。 这样做的最佳方法是什么?

更改现有 object 的类型在 Java 中不是一个有意义的概念:Object 只是一些东西。 然而,JPA 本质上是关系(通常)数据库上的一个非常复杂的魔术视图,并且完全有可能有多个类引用同一个表; 我之前使用只读的@Entity FooSummaryView完成了此操作,它仅从一些大型遗留怪物中检索几列。

一般来说,我的建议是让您的ProviderCharacteristics使用 User FK 作为 PK,将您的 ProviderCharacteristics 放在带有@MapsId的单独表中,但是如果您不想迁移实际的数据库模式,那么您需要手动操作您的行进行更改。 您的第二个选项是简单地修改 JDBC 中的鉴别器(以及满足验证约束所需的任何更新)似乎是侵入性最小的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM