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-100×117.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-100×132.png%20100w[]


5結論

この記事では、

@ JoinColumn

アノテーションの使い方を学びました。

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

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