在继承中设置Grail Domain的[class]属性

时间:2015-07-23 11:36:02

标签: grails inheritance grails-domain-class

我有不同类型的用户。 每个用户都继承自一个类: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实例的所有链接都将指向任何内容。

任何人都能有一个很好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

您可以使用HQL执行此操作:

DomainClass.executeUpdate("update DomainClass dc set dc.class = '${newDomainClass.name}' where id = ${id}")

我建议反对它--HQL跳过验证,因此如果AppUser和AdminUser类具有不同的属性,那么在执行此操作时可能会在数据库中出现无效对象。

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

如果没有,重新创建用户似乎并不好 - 如果AdminUser和AppUser类不同,那么用户实例也应该是。