【发布时间】:2020-01-12 01:26:04
【问题描述】:
我有一个实体ProjectEmployee,它代表一个三元关联。它的两个字段Employee 和Project 的组成必须是唯一的:
@Entity
@Data
@IdClass(ProjectEmployeeId.class)
public class ProjectEmployee {
@Id
@ManyToOne
private Project project;
@Id
@ManyToOne
private Employee employee;
@ManyToOne
private ProjectEmployeeRole projectEmployeeRole;
}
我正在使用 REST,我想用唯一标识符识别每个资源。我不能为ProjectEmployee 做这件事,因为这个实体没有唯一的标识符。什么是最好的解决方案?我总是需要发送两个参数来识别这个资源吗?
获取:
../projectemployees/{proejctId}/{employeeId}
这将识别资源,但有没有办法只使用一个标识符而不是两个?
【问题讨论】:
-
我强烈建议使用人工(即用户不可见)主键。
-
嗯,你的意思是我应该使用 UUID 之类的东西来从应用程序外部识别我的资源吗?所以我可以继续拥有我现在拥有的双主键,只需添加一个唯一列“uuid”,我可以用它来识别静止的资源?
../projectemployees/{uuid}? -
我建议反过来:将
UUID设为主键,将UNIQUE约束添加到其他两列。老实说,我不确定我是否会通过 REST API 公开这种关系。我建议使用类似 HATEOAS 的方法:让Employee返回对他/她参与的项目的引用列表(uris);让项目返回参与项目的员工的引用列表(uris)。