上映射:休眠

问题描述:

我新的hibernate我通过几个(12)教程转眼就hibernate和在我的项目甚至实现,我得出了以下结论 -上映射:休眠

mapped by指物体的另一面是所有者

这只是针对数据库的角度来看,实际上我是如何在数据库中创建关系的,一般用mapped by来避免不必要的表。

从查看Java点这对你的代码没有任何影响,同样的代码与mapped by运行的行为完全相同相同甚至我们删除mapped by

我的上述理解是否正确,如果不是,请您解释一下,在这种情况下,这种行为有何不同?

不,它不是。 mappedBy实际上与数据库无关。当关联是双向的时,它告诉关联的哪一方是拥有方。假设你在公司(反面)和雇员(所有者面)之间有关联。当谷歌建立和约翰之间的关联,

google.addEmployee(john); 

不会让休眠保存协会在数据库中,因为你只设置关联的反向侧。

john.setCompany(google); 

会让Hibernate将关联保存在数据库中,因为你设置了关联的所有者端。

每个双向关联都必须有一个所有者方和一个相反方。

在OneToMany双向关联中,所有者方必须是多方面的。

+0

我必须尝试通过自己的,但只是想知道,如果我启用级联比'google.addEmployee(约翰)'将工作与否? – TheCurious

+1

不会。例如,在设置了一个cascase PERSIST的情况下,坚持使用google会坚持john,但john仍然不属于google。 –

+0

正如你所说的**每一个双向关联都必须有一个所有者端和一个反面端**但是我坚持双向,没有'映射',但它只是在'@ onetomany'和'@ manytomany'的情况下创建了额外的表并且如果是@ @ onetoone,则在两张表中加入joincolum。这是更好的数据库设计的最佳做法吗? – TheCurious

这很容易理解,mappedBy显示了FK所在的位置,并且当JB Nizet伤心时,它显示谁是关系的所有者,谁负责管理关系。

+0

它并不总是显示FK所在的位置。例如,在多对多关联中,mappedBy是必需的,但不涉及FK的位置。这不是思考mappedBy的正确方法。 –