0

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

在本教程中,我了解了@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;

    ...

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

4

1 回答 1

2

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

一个用户可以有n readablen 个 writable组。这些权限必须存储在第三个表中(不在 User 表中,也不在 Group 表中)。但还有其他属性,例如authorisedBy和“authorizedOn”。所以@ManyToMany没有用,因为我无法真正控制它。此外,附加属性使得通过 JPA 进行映射变得困难。

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

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

  1. 用户
  2. 组 -有关组模型的一般信息
  3. UserGroup -包含附加字段,如:permissionsauthorisedByauthorisedOn

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

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

也许更有用的信息

于 2013-09-27T09:06:41.813 回答