次のようなテーブル階層があります
Job{jobId, title} との 1 対多の関係を持つ Job{jobId, title}
Task{taskId, jobId(FK), task_title} との 1 対多の関係
SubTask{subTaskId, TaskId(FK), subtask_title}.
今、私はこれらの上記のプライマリテーブルを拡張するテーブルのサブセットを持っています
TechinalJob{jobId(FK), Technical_Details},
TechinalTask{taskId(FK), Technical_Task_Details},
TechinalSubTask{subTaskId(FK), Technical_SubTask_Details}.
同様に、管理ジョブ/タスク/サブタスクがあります。
しかし、キャッチは、私は技術職/タスク/サブタスクまたは管理職の間に関係船を持っていないということです..関係は元のジョブ/タスク/サブタスクを介しています. 技術職/タスク/サブタスクまたは管理職にも主キーがありません。したがって、TechinalJob と TechincalTask の間に双方向の 1 対多の関係を作成する必要がある場合は、Job/Task/SubTask テーブル構造を調べて次の手順を実行する必要があります。Hibernate 継承を使用してこれを達成するにはどうすればよいですか。
2015 年 3 月 25 日更新:
Zieluが提案したver2を試した後。これは修正されたコードです
@Entity
@Table(name = "Job")
@Inheritance(strategy=InheritanceType.JOINED)
public class Job {
@Id
private int jobId;
@OneToMany(mappedBy="job")
protected Set<? extends Task> tasks;
public Set<? extends Task> getTasks(
return tasks;
);
}
@Entity
@Table(name = "Task")
@Inheritance(strategy=InheritanceType.JOINED)
public class Task {
@Id
private int taskId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "jobId", updatable=false, insertable=false)
public Job job;
public Job getJob() {
return job;
}
public void setJob(Job job) {
this.job= job;
}
}
@Entity
@Table(name = "TechinalJob")
@PrimaryKeyJoinColumn(name="jobId")
public class TechincalJob extends Job {
@OneToMany(mappedBy="job")
Set<TechincalTask> tasks;
@Override
public Set<TechnicalTask> getTasks() {
return (Set<TechnicalTask>)tasks;
};
@Column(name="Technical_Details")
private Integer Technical_Details;
}
@Entity
@Table(name = "TechincalTask")
@PrimaryKeyJoinColumn(name="taskId")
public class TechincalTask extends Task {
public TechincalJob getJob() {
return (TechincalJob)job;
}
@Column(name="Technical_Task_Details")
private Integer Technical_Task_Details;
}
これを試してみると、 Caused by: org.hibernate.AnnotationException: MappedBy reference an unknown target entity property: TechincalJob.tasks の TechinalTask.jobという例外が発生しました。タスクを拡張し、タスクのジョブが公開されていることを確認していますが、TechnicalTask でジョブを見つけることができません。
前もって感謝します..