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

@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 emails;
}

@Entity
public class Email {

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

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

image

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

image

5. 結論

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

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