gpt4 book ai didi

java - Hibernate 将实例转换为子类

转载 作者:行者123 更新时间:2023-11-30 11:58:19 25 4
gpt4 key购买 nike

我已经在 J​​PA 中映射了类。 :

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class User {
private Long id;
private Long name;
//getters and setters go here
....
}

我还有一个这个类的子类,叫做 Admin:

@Entity
public class Admin extends User {
private String cridentials;
//getters and setters go here
....
}

现在在我的代码中,我已经管理了附加到 session 的用户实例

...
User user = entityManager.find(User.class, userId)

我需要将此用户转换为其子类 Admin。这意味着我需要“用户”表数据保持不变,并将新行插入到“管理”表中:

javax.persistence.EntityManager entityManager = ...;
...
User user = entityManager.find(User.class, userId)
Admin admin = new Admin();
admin.setName(user.getName());

entityManager.persist(admin);

但是在我执行最后一行之后,另一行被插入到 User 和 Admin 表中。我将如何解决这个问题?

到目前为止我发现的唯一方法是将用户的字段保存在某处,然后从数据库中删除该实例,然后使用用户类中的所有数据创建新的管理。但我敢打赌有更好的方法来做到这一点。

谢谢

最佳答案

(...) But after I execute the last line, another row is inserted in both User and Admin tables. How would I solve this?

好吧,您创建了一个新的 Admin 实例并对其调用了 persist,所以这正是您告诉 Hibernate 要做的事情。尝试将获取的 User 实例向下转换为 Admin(未测试)。

但是在我看来,您的设计有些问题,您应该分配某种角色而不是在这里使用继承。

关于java - Hibernate 将实例转换为子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3244836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com