java - 玩2框架多对多关系更好的设计

标签 java database jpa playframework-2.0 many-to-many

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

在教程中我了解了 @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可读n 可写 组。这些权限必须存储在第三个表中(不在用户表中,也不在组表中)。还有其他属性,例如 authorizedBy 和 'authorizedOn'。所以@ManyToMany不起作用,因为我没有真正控制它。此外,附加属性使得很难通过 JPA 进行映射。

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

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

  1. 用户
  2. 群组 - 有关群组模型的一般信息
  3. UserGroup - 包含其他字段,例如:permissionsauthorizedByauthorizedOn

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

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

也许更有用的信息

关于java - 玩2框架多对多关系更好的设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19015472/

相关文章:

java - Spring Boot Security 未将登录端点列入白名单

java - 无法连接到 SOCKS 代理 :Connection refused: connect

php - Laravel 5.2 有条件更新数据库

php - php如何将表1中的数据插入到表2中

java - Spring Boot 数据存储库上的复合主外键

java - 更新连接表中的值很麻烦 spring data JPA

java - 更新 JMenu 显示名称

java - 这个Java程序是否需要是两个独立的文件

mysql - 如何从 dbr golang 查询生成器中提取原始查询

java - Spring 3.2 + Hibernate 4.3.4 + jUnit : EntityManagerFactory is closed