3.2.7. セカンダリテーブルのマッピング
@SecondaryTable または @SecondaryTables クラスレベルアノテーションを使用して、複数のテーブルに対して単一のエンティティ Bean をマップできます。カラムが特定のテーブルに含まれることを表現するには、@Column または @JoinColumn の table パラメータを使用します。
@Entity
@Table(name="MainCat")
@SecondaryTables({ @SecondaryTable(name="Cat1", pkJoinColumns={ @PrimaryKeyJoinColumn(name="cat_id", referencedColumnName="id") ), @SecondaryTable(name="Cat2", uniqueConstraints={@UniqueConstraint(columnNames={"storyPart2"})}) })
public class Cat implements Serializable {
private Integer id;
private String name;
private String storyPart1;
private String storyPart2;
@Id @GeneratedValue
public Integer getId() {
return id;
}
public String getName() {
return name;
}
@Column(table="Cat1")
public String getStoryPart1() {
return storyPart1;
}
@Column(table="Cat2")
public String getStoryPart2() {
return storyPart2;
}
この例では、
name は MainCat に含まれます。storyPart1 は Cat1、storyPart2 は Cat2 に含まれます。Cat1 は cat_id を外部キーとして MainCat に結合されます (Cat2 は id を使用します) (つまり、MainCat id カラムが持つのと同じカラム名)。さらに、storyPart2 に対する一意の制約が設定されます。
追加の例については、JBoss EJB 3 チュートリアルまたは Hibernate Annotations ユニットテストスイートを確認してください。