JPA @Discriminator:如何将一个实体转换为另一个实体(基于鉴别器)

时间:2011-01-18 05:21:08

标签: java jpa

我正在尝试使用不同类型用户的User表。我有一个用户类,然后由Customer和Employee以及Manager和admin扩展它们,它们都位于同一个表中,但它们都有不同的鉴别符。

现在我的应用程序是这样的:首先用户进入并以用户身份登录,然后他成为客户或员工。在用户创建客户或员工之后,我想稍后更改为经理或管理员。我该如何更新呢。如何使鉴别器值与实体最初的值不同。

我可以使用简单的sql来更新表中的DTYPE值,但我很确定JPA必须有一些更有效的方法。

或者我是否删除了之前说的“员工”用户并创建了一个新的“管理员”用户。我尝试实例化实体,但它没有给我任何方法,我可以更新该实体的Discriminator。

由于 赛。

2 个答案:

答案 0 :(得分:1)

或许最好将User(例如CustomerEmployeeManagerAdmin)的角色建模为具有一个角色的单独实体与User的一对一关系(或多对一,如果User可能同时有多个Role。然后,如果用户的角色发生变化,您只需删除一个角色并创建另一个角色。

答案 1 :(得分:0)

我认为您可以创建复制构造函数,并实例化一个新对象,例如:

new Employee(existingUser);

因此将复制标识符(@Id字段),并且当持久化实体时,将触发更新。试试吧。