プロジェクトが複数のタスクを持つことができるプロジェクトやタスクのような一対多の関連付けを考えてみましょう。これがプロジェクト表の主キーを参照するタスク表の外部キー句を使用してモデル化されている場合、@ JoinColumn注釈を所有サイド、つまり多くの側が常に所有側であるタスク表に入れます。 しかし、これが第3のテーブルproject_taskを使用してマッピングされている場合、@JoinTable注釈は反対側で、つまりプロジェクトエンティティで使用されています。しかし、@ JoinTableは常に所有側にあるべきです。外部キーを持つなぜ@JoinTable注釈は常に@OneToMany注釈とともに表示されます
アプローチ1:3番目のテーブルと@JoinTableアノテーションで
@Entity
public class Project {
@OneToMany(mappedBy = "project")
private Collection<Task> tasks;
}
@Entity
public class Task {
@ManyToOne
@JoinColumn(name="PROJECT_ID")
private Project project;
}
アプローチ2:@JoinTableを使用した場合
@Entity
public class Project {
@JoinTable(name = "MY_JT",
joinColumns = @JoinColumn(
name = "PROJECT_ID",
),
inverseJoinColumns = @JoinColumn(
name = "TASK_ID"
)
@OneToMany
private List<Task> tasks;
}
@Entity
public class Task {
private Project project;
}
なぜ所有側は、プロジェクトエンティティにシフトしていますか?