最佳实践:是否应该避免双向关系?

时间:2011-12-21 12:21:57

标签: language-agnostic datamodel

我想知道最佳做法是如何处理这样的数据模型: Simple security model

我们有3个实体:

  • 作用
  • 用户
  • 权限

请注意,实体表示为java类,并将通过hibernate映射到数据库,无论如何,我认为可以在不了解这些技术的情况下回答问题。

Role&之间存在多对多的关系。 User以及Role和{}之间Permission

在这里建立双向关系是否可以?那么,您可以要求Role向您提供所有成员并要求User给您他所有的角色。

您可以向两个实体询问是非常自在的,但是一个缺点是,无论何时删除关系,您都必须管理这两个实体。

E.g。如果您从Role删除User,则还必须从User中删除Role。如果存在许多这种关系,这可能会非常烦人。因此,我想最好的做法是什么。

2 个答案:

答案 0 :(得分:4)

我尽量避免双向关系。而是在DAO / Repository中使用显式查询替换一个方向。保持模型更简单,如果通过接口正确完成,应用程序清理循环依赖

答案 1 :(得分:1)

  

这里有双向关系吗?所以,你可以要求Role给你所有的成员,并要求用户给你他所有的角色。

是。如果你真的需要两种方式的导航性,那么就没有理由阻止你以最简单的方式获得它。

  

一个缺点是,无论何时删除关系,都必须管理两个实体。

这取决于实现,可以以同步两个“结束”的方式实现数据模型。