在我的应用程序中,我有不同的User
和Item
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 个readable
和 n 个writable
组。这些权限必须存储在第三个表中(不在用户表中,也不存储在组表中(。还有其他属性,如authorisedBy
和"authorisedOn"。所以@ManyToMany没有工作,因为我没有真正控制它。此外,附加属性使得很难通过 JPA 进行映射。
也许其他设计是可能的,但我(仍然(认为引入一个新的类UserGroup
是最好的。此类与单个User
@ManyToOne
关系。
我最终定义了这三个模型:
- 用户
- 组 - 有关组模型的一般信息
- 用户组 - 包含其他字段,如:
permissions
、authorisedBy
、authorisedOn
等。
在我的用户模型上,我会有 getter getUserGroups()
,但也getPersonalGroup()
它基本上是 getUserGroups()
中Group
的一个(个人(实例,但createdBy
和authorisedBy
是同一个用户。
我发现这个设计对我来说更容易维护,也更清晰。此外,这种设计还帮助我创建了一个舒适的用户界面,管理员可以在其中管理和更改用户组的权限。
也许更有用的信息
- 使用额外列映射多对多关联表
- 如何为联接表中的其他属性创建多对多休眠映射?