我有一个表层次结构
Job{jobId, title} 与一对多关系
Task{taskId, jobId(FK), task_title} 与一对多关系
子任务{subTaskId, TaskId(FK), subtask_title}。
现在我有一个表的子集,这些表扩展了这些主表,例如
TechinalJob{jobId(FK), Technical_Details},
TechinalTask{taskId(FK), Technical_Task_Details},
TechinalSubTask{subTaskId(FK), Technical_SubTask_Details}。
同样,我将有管理作业/任务/子任务。
但问题是我在技术工作/任务/子任务或管理工作之间没有关系。这种关系是通过原始工作/任务/子任务来实现的。我在 Techincal Jobs/Tasks/SubTasks 或管理中也没有主键。因此,如果我必须在 TechinalJob 和 TechincalTask 之间创建双向一对多关系,我必须通过 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: TechinalTask.job in TechincalJob.tasks。尽管我正在扩展 Task 并确保 Task 中的工作是公开的,但它无法在 TechnicalTask 中找到工作。
提前致谢..