主要区别在于,双向关系提供了双向导航访问,因此您无需显式查询即可访问另一侧。此外,它还允许您在两个方向上应用级联选项。
请注意,导航访问并不总是很好,特别是对于“一对多”和“一对多”关系而言。想象一个
Group包含数千个
User的:
您将如何访问它们?对于这么多
User
s,您通常需要应用一些过滤和/或分页,以便无论如何都要执行查询(除非您使用集合过滤,对我来说这看起来像是hack)。在这种情况下,某些开发人员可能倾向于在内存中应用过滤,这显然不利于性能。请注意,具有这种关系可以鼓励这类开发人员在不考虑性能影响的情况下使用它。您将如何向添加新
User
的Group
?幸运的是,Hibernate在持久化关系时会考虑关系的所有权,因此只能设置User.group
。但是,如果要使内存中的对象保持一致,则还需要添加User
到Group.users
。但这会使HibernateGroup.users
从数据库中获取所有元素!
因此,我不同意“最佳实践”中的建议。您需要仔细设计双向关系,同时考虑用例(是否需要双向导航?)和可能的性能影响。



