2010-07-14 90 views
2

我已經在JPA中映射了類。 :Hibernate將實例轉換爲子類

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

我也有這個類的子類,稱爲管理員:連接到會議

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

我需要用戶的

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

現在在我的代碼,我管理的實例將此用戶轉換爲其子類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。但我敢打賭,這樣做有更好的方法。

感謝

回答

1

(...)但是我執行最後行後,另一行插入兩個用戶和管理員表所示。我將如何解決這個問題?

嗯,你創建了一個新的實例的Admin並叫persist所以這正是你告訴Hibernate的人。嘗試將提取的User實例向下轉換爲Admin,而不是(未測試)。

但是有些東西在你的設計中破壞了,你應該指定某種角色,而不是在這裏使用繼承。

+0

其實,管理員有許多屬性,用戶不應該有 - 這就是爲什麼我使用繼承。用戶無法下載到管理員,因此 '管理員a =(管理員)用戶;' 在這裏不起作用...用戶不是抽象的問題,它由系統和管理員使用。然而,我不能'告訴'hibernate從當前用戶創建新的管理員 - 即使當我將管理員的ID設置爲用戶的一個並嘗試合併時,它會說管理員不受管理。 – 2010-07-14 14:48:23