我正在尝试使用Hibernate注释在遗留数据库中定义两个实体之间的映射。正在考虑的实体不共享外键/复合键,此时,修改旧表不是一种可能的选择:(
实体类似于以下内容;
如果查看表格,他们不会保持任何外键关系,也不会共享相同的复合键,唯一的常见因素是列zip_code和school_name。我希望使用HIBERNATE ANNOTATIONS定义我的实体类,使用HIBERNATE ANNOTATIONS,每次从DB中检索学校实体时,我也希望让所有教师都与该学校相关联。我一直试图通过一对多,辅助表,连接表的示例来实现这一点,但是所有这些都要求具有外键关系或共享复合ID关系。
请帮助我使用共同的专栏设置学校和教师之间的一对多关系"学校名称"和"邮政编码"。
答案 0 :(得分:0)
您不需要任何外键来使用JPA映射关联。您只需在关联映射中引用相应的列及其引用的列:
@OneToMany
@JoinColumns({
@JoinColumn(name="SCHOOL_NAME", referencedColumnName="NAME"),
@JoinColumn(name="SCHOOL_ZIP", referencedColumnName="ZIP_CODE")
})
private Set<Teacher> teachers = new HashSet<>();
或者,如果您希望关联是双向的:
@OneToMany(mappedBy="school")
private Set<Teacher> teachers = new HashSet<>();
和
@ManyToOne
@JoinColumns({
@JoinColumn(name="SCHOOL_NAME", referencedColumnName="NAME"),
@JoinColumn(name="SCHOOL_ZIP", referencedColumnName="ZIP_CODE")
})
private School school;
是否存在外键约束与Hibernate无关。如果某位老师引用了一个未知的学校名称或邮政编码,那么就不要期望它能够完美地工作,这就是外键约束允许的阻止。