如何在休眠 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,它必须映射为一个实体。
因此您将在用户和共享之间建立一对多,在文件和共享之间建立一对多。
我有两个实体 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,它必须映射为一个实体。
因此您将在用户和共享之间建立一对多,在文件和共享之间建立一对多。