[英]One to one mapping in Hibernate?
假设我们有两个数据库表Instructor
和Instructor_Details
。 它们具有一对一的关系,因此每个讲师可以具有一个讲师详细信息,而一个讲师详细信息仅与一个讲师相关联。
在纯数据库而言, Instructor
表应该是父Instructor_Details
表的主键Instructor
表应作为外键Instructor_Details
表。
我正在学习Hibernate和大部分的例子@OneToOne
互联网上已经修改使得表Instructor_Details
主键被用作外键Instructor
表,这似乎是矛盾的Instructor
应该是父Instructor_Details
。
我如何能实现在这样,我可以使用的主键,最好的办法两个实体Instructor
为外键Instructor_Details
。 另外,请在我想要的实现中解释获取类型和级联。 带有代码的示例将非常有帮助。
编辑
让我们说这些表的属性如下:
讲师(instructor_id(主键),名字,姓氏)
Instructor_Details(detail_id(主键),dob,地址,instructionor_id(教师表中的外键))
因为从纯数据库的角度来讲,您正在将其建模为父/子,所以您被OneToMany所困扰。 在这种情况下,我做了什么,所以我可以保持这种关系,并利用诸如级联删除之类的优势。在实体本身上具有辅助方法。 由于Hibernate使用反射,因此您实际上不需要为私有成员实现公共getter和setter。
因此,例如,您的InstructorDetails Instructor
类的访问器可以如下所示:
public class Instructor {
...
@OneToMany
private List<InstructorDetails> instructorDetails;
public Optional<InstructorDetails> getInstructorDetails() {
if (instructorDetails == null || instructorDetails.size() == 0) {
return Optional.empty();
} else if (instructorDetails.size() > 1) {
// Optional raise if you want to be aware of corrupt Instructors that have many details
throw Exception("There's corrupt data");
} else {
return Optional.of(instructorDetails.get(0));
}
}
...
}
说得通? 与add相同...您可以有一个只包含单个详细信息的add,检查是否已经有一个add并且覆盖或抛出,但是在内部它处理列表。 与Instructor
打交道的人永远不会知道里面有保存他们的名单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.