JPA JoinColumnとmappedByの比較 質問する

JPA JoinColumnとmappedByの比較 質問する

違いは何ですか:

@Entity
public class Company {

    @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY)
    @JoinColumn(name = "companyIdRef", referencedColumnName = "companyId")
    private List<Branch> branches;
    ...
}

そして

@Entity
public class Company {

    @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY, 
    mappedBy = "companyIdRef")
    private List<Branch> branches;
    ...
}

ベストアンサー1

注釈は@JoinColumn、このエンティティがリレーションシップの所有者であることを示します(つまり、対応するテーブルには、参照先のテーブルへの外部キーを持つ列があります)。一方、属性は、mappedByこの側のエンティティがリレーションシップの逆であり、所有者が「他の」エンティティに存在することを示します。これは、"mappedBy" (完全な双方向リレーションシップ) で注釈を付けたクラスから他のテーブルにアクセスできることも意味します。

特に、質問のコードの場合、正しい注釈は次のようになります。

@Entity
public class Company {
    @OneToMany(mappedBy = "company",
               orphanRemoval = true,
               fetch = FetchType.LAZY,
               cascade = CascadeType.ALL)
    private List<Branch> branches;
}

@Entity
public class Branch {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "companyId")
    private Company company;
}

おすすめ記事