我有不同类型的用户。
每个用户都继承自一个类:AppUser。
一些用户具有AppUser的子类:AdminUser。

AppUser是否有可能成为AdminUser?
并让AdminUser成为AppUser?

我试着做appUserInstance.class = my.package.AdminUser但最终出现了ReadOnlyPropertyException

我也尝试过appUserInstance.properties = new com.michelin.dur.AppUser(appUserInstance.properties).properties->对象引用了未保存的 transient 实例

因此,我实际上能做的最好的事情就是删除/重新创建对象。
但是,这仍然是一个问题,因为指向我以前的User实例的所有链接都指向无内容。

有人对此有很好的解决方案吗?

最佳答案

您可以使用HQL做到这一点:
DomainClass.executeUpdate("update DomainClass dc set dc.class = '${newDomainClass.name}' where id = ${id}")
不过,我建议您不要这样做-HQL会跳过验证,因此,如果类AppUser和AdminUser具有不同的属性,那么这样做可能会导致数据库中的对象无效。

我会尝试通过使用权限(角色)来解决此问题,或者如果使用太多权限,则使用名为UserType的属性而不是继承来解决此问题。

如果不是这样,则重新创建用户似乎还不错-如果AdminUser和AppUser类不同,则用户实例也应该如此。

08-28 15:40