【发布时间】:2015-07-04 06:10:39
【问题描述】:
我有两个实体 User 和 File 。一个文件可以与许多用户共享,一个用户可以接收许多文件。所以这是两个实体之间的多对多关系。
在用户类中:
@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;
在 File 类中:
@ManyToMany(mappedBy = "receivedfiles")
private List<User> receivers;
我的问题是我想保存 shareTime 并在与用户共享文件时分配权限。我的意思是文件 1 可以与具有读写权限的用户 1 共享,并且可以与具有只读权限的用户 2 共享。
我是 JPA 的新手。我在想的是 receiver_shared 表必须包含一个权限列和 shareTime 列。
怎么做?
更新:
正如 JB Nizet 建议的那样,我创建了一个新的 Share 实体。
我已将此添加到我的文件类中
@OneToMany (mappedBy = "sharedFile",fetch=FetchType.LAZY)
private List<Share> shares = new ArrayList<Share>();
我已将此添加到我的用户类中
@OneToMany (mappedBy = "receiver",fetch=FetchType.LAZY)
private List<Share> receivedfiles = new ArrayList<Share>();
在我的 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);
【问题讨论】:
标签: database jpa many-to-many