2013-05-28 215 views
0

我在jpa中實現inheritence有問題。我有以下實體:處理繼承層次結構3層深jpa

@Entity 
@Inheritance(strategy=InheritanceType.JOINED) 
public class Person implements Serializable{ 
private String name; 
private String } 

@Entity 
@Inheritance(strategy=InheritanceType.JOINED)  
public class User extends Person { 
private String salary;} 

public class chef extends User{} 

我希望所有的實體都是具體的,這是正確的還是應該改變一些東西?

+0

看起來好,你有什麼問題? – James

+0

我想插入表中的用戶現有的用戶在廚師:用戶廚師=新廚師(); chef =(用戶)dao.trouverPersonneParId(「mark」); \t \t dao.ajout_createur(chef);但我有這個錯誤:java.lang.ClassCastException:com.pfe.domaine.User不能轉換爲com.pfe.domaine.Chef – joice

+0

你可以發佈關於你的dao的代碼嗎?看起來有一段時間從'User'到'Chef'的表演,這就是爲什麼我想看看你在做什麼,看看我能不能幫助你。 –

回答

0

看起來像您的用戶條目可以獨立於廚師表條目。 Java繼承不允許你切換一個對象來使它成爲一個不同的類 - 一個對象是一個用戶或一個廚師。 JPA加入繼承遵循Java繼承的規則,因此Chef表中的行與User錶行綁定,因爲它們是單個實體。

所以,如果你有一個用戶實體,你不能讓它成爲廚師實體。聽起來你需要的是一個可以分配角色的用戶,比如廚師。一種方法是像註釋中提到的那樣映射類型字段 - 但它不會讓您訪問Chef表數據 - 您仍然無法使用此選項切換實例成爲Chef。如果您需要這些數據,您可以創建用戶和廚師獨立實體,並讓用戶擁有1:1映射(稱爲角色),可以爲其指定一個包含相關數據和業務規則的Chef實體。

+0

ok謝謝@Chris。1:1映射的解決方案是一個好主意,但對我來說我不需要訪問Chef表數據 – joice