我有不同类型的用户。 每个用户都继承自一个类:AppUser。 一些用户拥有AppUser的子类:AdminUser。
AppUser可以成为AdminUser吗? 并且让AdminUser成为AppUser?
我试过这么做
appUserInstance.class = my.package.AdminUser
但结果是ReadOnlyPropertyException
我也试过了
appUserInstance.properties = new com.michelin.dur.AppUser(appUserInstance.properties).properties
- > object引用未保存的瞬态实例
所以我真正做的最好的事情就是删除/重新创建对象。 但是,这仍然是一个问题,因为指向我之前的User实例的所有链接都将指向任何内容。
任何人都能有一个很好的解决方案吗?
答案 0 :(得分:1)
您可以使用HQL执行此操作:
DomainClass.executeUpdate("update DomainClass dc set dc.class = '${newDomainClass.name}' where id = ${id}")
我建议反对它--HQL跳过验证,因此如果AppUser和AdminUser类具有不同的属性,那么在执行此操作时可能会在数据库中出现无效对象。
我会尝试通过使用权限(角色)来解决这个问题,或者如果过多,通过使用名为UserType的属性而不是继承来解决这个问题。
如果没有,重新创建用户似乎并不好 - 如果AdminUser和AppUser类不同,那么用户实例也应该是。