@JoinColumnアノテーションの説明

1前書き

アノテーション javax.persistence.JoinColumn は、エンティティの関連付けまたは要素コレクションの結合列としての列をマークします。

このクイックチュートリアルでは、基本的な @ JoinCloumn の使用法の例をいくつか紹介します。

2 @ OneToOne マッピングの例

@ JoinColumn アノテーションと @ OneToOne マッピングの組み合わせは、所有者エンティティの特定の列が参照エンティティの主キーを参照していることを示します。

@Entity
public class Office {
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "addressId")
    private Address address;
}

上記のコード例は、 Office エンティティを Address エンティティの主キーにリンクする外部キーを作成します。 Office エンティティの外部キー列の名前は、 name プロパティで指定されます。

3 @ OneToMany マッピングの例

@ OneToMany マッピングを使用するときは、 mappedBy パラメーターを使用して、指定した列が別のエンティティによって所有されていることを示すことができます。

@Entity
public class Employee {

    @Id
    private Long id;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "employee")
    private List<Email> emails;
}

@Entity
public class Email {

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "employee__id")
    private Employee employee;
}

上記の例では、 Email (所有者エンティティ)には、id値を格納し、 Employee エンティティへの外部キーを持つ結合列 employee id__があります。

リンク:/uploads/joincol1-100x117.png%20100w[]

4 @ JoinColumns

複数の結合列を作成したい場合は、 @ JoinColumns アノテーションを使用できます。

@Entity
public class Office {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumns({
        @JoinColumn(name="ADDR__ID", referencedColumnName="ID"),
        @JoinColumn(name="ADDR__ZIP", referencedColumnName="ZIP")
    })
    private Address address;
}

上記の例は、 Address エンティティの ID 列と ZIP 列を指す2つの外部キーを作成します。

リンク:/uploads/joincol2-100x132.png%20100w[]

5結論

この記事では、 @ JoinColumn アノテーションの使い方を学びました。

単一エンティティの関連付けと要素コレクションの両方を作成する方法の例を示しました。

いつものように、すべてのソースコードが入手可能ですhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/hibernate5[GitHubで動く]