2012-05-12 7 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; 
    } 
} 

それはUSER表を作成し、正常に動作しています。

私は正しい方法でそれをやっているのか疑問に思っていました。

ありがとうございました。

答えて

4

目的は、複数の独立したエンティティに基本クラスの共通フィールドを継承させるだけの場合は、それを正しく実行していません。アノテーション@Inheritanceは不要です。 @エンティティは、エンティティ(Vehicleなど)と複数のサブエンティティ(Car、Bikeなど)を所有している場合に必要です。

+0

返信いただきありがとうございます。 Baseから@MappedSuperclassと@Inheritance(strategy = InheritanceType.JOINED)を削除しても、IDのAnnotationを保持すると、例外が発生します。org.hibernate.AnnotationException:エンティティにapprecvが指定されていません:app.dev.ems .data.model.impl.User –

+0

MappedSuperclassアノテーションを削除しないでください。継承アノテーションのみ。それはどちらか一方です。そしてあなたがここで望むものはMappedSuperclassです。あなたはjavadocを読んだことがありますか? –

+0

ありがとうございます。私はそれを読んでいる。 –

関連する問題