2012-05-12 62 views
2

在我的應用程序中,我試圖通過註釋實現Hibernate映射。在那裏我有一個抽象的基類,在這個類中存在Id屬性。我正在用一個子類繼承這個基類。下面的代碼給出:Hibernate Annotation繼承抽象基類

@MappedSuperclass 
@Inheritance(strategy=InheritanceType.JOINED) 
public abstract class Base implements IBase { 

    private static final long serialVersionUID = -1433573674276444516L; 

    private int id; 

    public Base() { 

    } 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    @Column(name="ID") 
    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 
} 

而子類是:

@Entity 
@Table(name="USER") 
public class User extends Base implements IUser { 

    private static final long serialVersionUID = 344528694909088439L; 

    private String name; 

    public User() { 

    } 

    @Column(name="NAME", nullable=false) 
    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

它創建用戶表和工作的罰款。

我想知道我是否正確地做到這一點。

謝謝。

回答

4

如果目標只是讓幾個獨立的實體從基類繼承一個公共字段,那麼不,你沒有正確地做。註釋@Inheritance是不必要的。當你有一個實體(例如車輛)和幾個子實體(例如汽車,自行車)時,@繼承是必要的。

+0

感謝您的回覆。如果我從Base中刪除了@MappedSuperclass和@Inheritance(strategy = InheritanceType.JOINED),但在Id上保留Annotation,那麼我會得到異常:org.hibernate.AnnotationException:沒有爲entity:app.dev.ems指定標識符.data.model.impl.User –

+0

不要移除MappedSuperclass註解。只有繼承註釋。它是一個或另一個。而你想在這裏的是MappedSuperclass。你讀過他們的javadoc嗎? –

+0

謝謝。我在讀它。 –