1. 概要

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

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

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_id があり、Employeeエンティティへの外部キーがあります。

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つの外部キーを作成します。

5. 結論

この記事では、@JoinColumnアノテーションの使用方法を学びました。 単一のエンティティの関連付けと要素のコレクションの両方を作成する方法を確認しました。

いつものように、すべてのソースコードはGitHub利用できます。