如何在休眠 JPA 的多对多关系中将其他列添加到 joinTable?

how to add other columns to the joinTable in a Many To Many relationship in hibernate JPA?

我有两个实体 User 和 File 。一个文件可以与多个用户共享,一个用户可以接收多个文件。所以这是两个实体之间的多对多关系。

在用户 class :

 @ManyToMany
        @JoinTable(name = "receiver_shared",
                joinColumns = @JoinColumn(name =  "user_id", 
                               insertable =false, updatable = false),
                inverseJoinColumns = @JoinColumn(name ="file_id",   
                                     insertable = false, updatable = false))
         private List<File> receivedfiles;

在文件中 class :

  @ManyToMany(mappedBy = "receivedfiles")
        private List<User> receivers;

我的问题是我想保存 shareTime 并在与用户共享文件时分配权限。我的意思是文件 1 可以与具有读写权限的用户 1 共享,并且可以与具有 read Only 权限的用户 2 共享。

我是 JPA 新手。我在想的是 receiver_shared Table must contain a permission column and shareTime column 。

怎么做?

更新:

按照 JB Nizet 的建议,我创建了一个新的共享实体。

我已将其添加到我的文件中 Class

@OneToMany (mappedBy = "sharedFile",fetch=FetchType.LAZY)
    private List<Share> shares = new ArrayList<Share>();

我已将此添加到我的用户 Class

@OneToMany (mappedBy = "receiver",fetch=FetchType.LAZY)
    private List<Share> receivedfiles = new ArrayList<Share>();

在我的分享中 Class 我添加了一个列 shareTime ,一个列权限和 :

@ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name = "receiver_id")
    private User receiver;

@ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name = "file_id")
    private File sharedFile;

我用 JUnit 测试了我的配置

User receiver=userRepository.findOne((long)2);
File toshare=fileRepository.findOne((long)2);
Share s=new Share(toshare,receiver,1,new Timestamp(newDate().getTime()));
shareRepository.save(s);

如果连接 table 包含额外的功能信息,则它不再是连接 table,它必须映射为一个实体。

因此您将在用户和共享之间建立一对多,在文件和共享之间建立一对多。