Java 是否可以*转换*多态Hibernate/JPA实体的类型?

Java 是否可以*转换*多态Hibernate/JPA实体的类型?,java,hibernate,jpa,polymorphism,Java,Hibernate,Jpa,Polymorphism,更新:发布后,我发现这是一个副本 我有一个奇怪的业务需求:我的应用程序支持用户作为“来宾”开始,然后注册成为“注册”用户 来宾受到功能限制:他们不允许访问注册后可用的某些功能。但是,他们确实可以访问功能的子集,并且可能在注册之前开始积累持久数据。这些特性中的许多将被建模为用户实体类上的方法,累积的数据自然会通过GuestUser的@Id进行关联 因此,我打算在JPA/Hibernate中将其建模为多态实体类型: User ^ |

更新:发布后,我发现这是一个副本


我有一个奇怪的业务需求:我的应用程序支持用户作为“来宾”开始,然后注册成为“注册”用户

来宾受到功能限制:他们不允许访问注册后可用的某些功能。但是,他们确实可以访问功能的子集,并且可能在注册之前开始积累持久数据。这些特性中的许多将被建模为用户实体类上的方法,累积的数据自然会通过GuestUser的@Id进行关联

因此,我打算在JPA/Hibernate中将其建模为多态实体类型:

User ^ | +-------------+ | | GuestUser RegisteredUser 在客人决定“注册”之前,这一切都很正常

现在,我想通过设置

    guestUser.guest = false;
此转换的结果在逻辑上是清除GuestUser对象,然后从继承的用户映射中获取具有相同ID和共享字段的等效RegisteredUser


这可能吗?我是否可以以某种方式使用entityManager.refresh()来实现所需的结果?我是否可以创建一个RegisteredUser实例并手动将其ID分配给现有GuestUser中的值?(这种ID分配想法似乎有问题,因为我们的旧数据库需要
GenerationType.AUTO

您是否尝试过更改来宾标志,保存更改,然后从数据库中加载具有相同用户ID的新对象?

更喜欢委派而不是继承。无论如何,它的设计更好,并且更容易以一种干净的方式处理这种变化

不要按子类型进行区分,而是创建一个角色,当您想更改他们可以访问的内容时,可以重新分配该角色。

可能重复的
    guestUser.guest = false;