代码之家  ›  专栏  ›  技术社区  ›  Denys Kniazhev-Support Ukraine

Hibernate将实例转换为子类

  •  2
  • Denys Kniazhev-Support Ukraine  · 技术社区  · 16 年前

    我在JPA中映射了类:

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

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

    现在在我的代码中,我管理了连接到会话的用户实例

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

    我需要把这个用户转换成它的子类,Admin。这意味着我需要“User”表数据保持不变,并将新行插入到“Admin”表中:

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

    到目前为止,我找到的唯一方法是保存某个用户的字段,然后从DB中删除这个实例,然后用User类中的所有数据创建新的Admin。但我敢打赌有更好的方法。

    1 回复  |  直到 16 年前
        1
  •  1
  •   Pascal Thivent    16 年前

    (…)但是在我执行最后一行之后,在User和Admin表中插入另一行。我该怎么解决这个问题?

    Admin 打电话来了 persist 所以这正是你告诉Hibernate要做的。试着贬低被欺骗的人 User 实例为 行政 相反(未测试)。