映射者:Hibernate

The*_*ous 0 java spring hibernate

我是新的hibernate我通过几个(走了1,2对)的教程hibernate,甚至在我的项目实施,我得出了以下结论-

mapped by 意味着对象的另一面是所有者

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

从java的角度来看,这对你的代码没有影响,运行的相同代码即使我们删除mapped by也会表现完全相同mapped by.

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

JB *_*zet 5

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

google.addEmployee(john);
Run Code Online (Sandbox Code Playgroud)

不会让Hibernate在数据库中保存关联,因为您只设置了关联的反面.

john.setCompany(google);
Run Code Online (Sandbox Code Playgroud)

将使Hibernate在数据库中保存关联,因为您设置了关联的所有者端.

每个双向关联必须具有所有者方和反方.

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

  • 如果你没有mappedBy,那么你实际上有两个单向关联(很容易变得不一致).你不希望这样. (2认同)
  • 保存公司并向其添加员工,而无需设置员工的公司.然后,在另一个事务中,加载员工并询问其公司是什么.它将返回null而不是公司.加载公司并检查其员工集合:员工应该在那里. (2认同)