发挥2框架多对多关系更好的设计



在我的应用程序中,我有不同的UserItem s,因此每个用户可以选择许多项目。

在教程中,我了解了@ManyToMany注释。

@Entity
public class Item extends Model {
    ...
    @ManyToMany(cascade = CascadeType.REMOVE)
    public List<User> users = new ArrayList<User>();

但我能想到的第二个选项是为用户到项目的关系定义一个单独的类,以便我可以添加其他信息,例如日期和时间。

@Entity
public class ItemUserRel extends Model {
    @Id
    public Long id;
    public User user;
    public Item item;
    //additional information
    public Date date;
    ...

这两种选择中哪一个是更好的设计,为什么?

不久前我遇到了类似的问题。我还必须处理模型User和模型Group。我的要求是:

用户可以有 n 个readablen 个writable组。这些权限必须存储在第三个表中(不在用户表中,也不存储在组表中(。还有其他属性,如authorisedBy和"authorisedOn"。所以@ManyToMany没有工作,因为我没有真正控制它。此外,附加属性使得很难通过 JPA 进行映射。

也许其他设计是可能的,但我(仍然(认为引入一个新的类UserGroup是最好的。此类与单个User @ManyToOne关系。

我最终定义了这三个模型:

  1. 用户
  2. 组 - 有关组模型的一般信息
  3. 用户组 - 包含其他字段,如:permissionsauthorisedByauthorisedOn等。

在我的用户模型上,我会有 getter getUserGroups(),但也getPersonalGroup()它基本上是 getUserGroups()Group的一个(个人(实例,但createdByauthorisedBy是同一个用户。

我发现这个设计对我来说更容易维护,也更清晰。此外,这种设计还帮助我创建了一个舒适的用户界面,管理员可以在其中管理和更改用户组的权限。

也许更有用的信息

  • 使用额外列映射多对多关联表
  • 如何为联接表中的其他属性创建多对多休眠映射?

相关内容

最新更新