2017-04-12 16 views
-1

Hibernateで1つのテーブルにベースクラスと子孫クラスを追加する方法はありますか?Hibernate - 1つのテーブルに2つのクラスを追加する

ベースのクラスのプロパティを持つ1つのテーブルUSERSで

public classs User exetends Id{ 
public String username; 
public String password; 
} 

public class Id{ 

protected int id 
} 

子孫クラス:ID、ユーザ名、パスワードを入力します。

+0

は、あなたがしようとしましたGoogle、このリンクを確認するhttp: //www.javatpoint.com/hibernate-table-per-hierarchy-using-annotation-tutorial-example –

答えて

0

私が理解したところから。

エンティティBaseが必要です。そして、Baseエンティティは、他の​​エンティティによって拡張されるべきです。つまり、​​は、Baseエンティティのすべてのプロパティを持つ必要があります。このデザインのユースケースの1つは、Baseエンティティクラスのすべての​​クラスの共通のプロパティ(id、createdDate、updatedDate)を持つことです。これで行くことに

一つの方法は次のとおりです。

BaseEntity(基本クラス)

@MappedSuperclass 
public class BaseEntity { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 

    //..setter and getters 
} 

ユーザー(子孫クラス)

@Entity 
@Table(name = "user") 
public class User extends BaseEntity { 

    @Column(name = "name") 
    private String name; //User specific properties 

    //..setters and getters here 
} 
0

最初に@Entityとマークしてテーブルであることを確認し、最上位レベルでテーブル名を@Tableに設定する必要があります。継承を使用するには、戦略を選択する必要があります。このインスタンスでは、SINGLE_TABLEが必要です。次に、正しいタイプを選択するためには、カラム名とディスクリミネータのタイプを設定する - この場合はINTEGERを選択して、@DiscriminatorColumnが必要です。また、型の注釈updatable = falseとinsertable = falseを追加して変更できないようにする必要があります。あなたは@Entity@DiscriminatorValue(この場合は1)でそれらをマークする必要があり、あなたのサブクラスで

@Entity 
@Table(name = "TABLE_NAME") 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@DiscriminatorColumn(name = "TYPE",discriminatorType = DiscriminatorType.INTEGER) 
public class Id { 

    @Column(name="TYPE", insertable=false, updatable=false) 
    private Integer type; 

} 

@Entity 
@DiscriminatorValue(value = "1") 
public classs User exetends Id{ 

    public String username; 
    public String password; 

} 
関連する問題