2.2.7. Mapping secondary tables 第2テーブルのマッピング

<2.2.6. Mapping composite primary and foreign keys | 目次

@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に、storePart1 は Cat1、storePart2 は Cat2 になるよ。Cat1 は cat_id を外部キーに MainCat と結合され、Cat2 は id(つまり、MainCatのidと同じ名前)で結合されるよ。さらに、storePart2はユニーク制約がセットされるよ。

JBoss EJB3 チュートリアルか、Hibernate Annotations の単体テストスイートにもっと例があるよ。<2.2.6. Mapping composite primary and foreign keys | 目次