違いは何ですか:
@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;
}